使用'tr'将重复的新行打印到单个新行?
问题描述:
我有我使用排序命令排序的单词列表,然后使用uniq -D
打印所有重复单词。输出文件foo.txt
如下:使用'tr'将重复的新行打印到单个新行?
always
always
bat
bat
boot
boot
boot
hi
hi
我然后尝试使用下面的命令脚本读取与tr
命令文件。
这不太合适,输出看起来和上面一样。
这是我到目前为止有:
cat foo.txt | tr -s '\n'
输出,然而,出现相同。我的目标是输出为:
always always
bat bat
boot boot boot
hi hi
答
另一种解决方案,你可以运行
另一awk
:
awk '{c=(($0!=p)?"\n":" "); printf c $0} {p=$0}' file
- c是任何单词之前打印的字符。
- p是前一个词。
- 如果前面的单词不同,请将c设置为换行符或将其设置为空格。
它打印换行的开头和结尾没有换行,因此我们可以添加几个:
awk '{c=(($0!=p)?"\n":" "); p=$0} NR==1{printf $0;next} {printf c $0}
END {printf "\n"}' file
另一种解决方案,你可以运行
uniq -c file
代替
-D
它打印
2 always
2 bat
3 boot
2 hi
然后打印第一个字段说的时间字:
uniq -c file | awk '{for (i=1;i<$1;i++) printf $2 " "; print $2}'
答
您可以用uniq以换行符分隔每个组。
之后sed把这个换行符作为字段分隔符。
uniq --all-repeated=separate infile | sed ':A;$bB;/\n$/!{N;bA};:B;s/\n/ /g'
'tr -d'挤在一起出现多个相同的*字符*,而不是同一行。你需要更复杂的东西。 –
请看看:[我应该怎么做当有人回答我的问题?](http://*.com/help/someone-answers) – Cyrus