我有一个单词列表,我使用sort命令对其进行了排序,然后使用uniq -D
打印了所有重复项。输出文件foo.txt
如下:
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
答案 0 :(得分:1)
另一个awk
:
awk '{c=(($0!=p)?"\n":" "); printf c $0} {p=$0}' file
它在开头打印换行符,最后没有换行符,所以我们可以添加更多:
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}'
答案 1 :(得分:0)
您可以使用uniq将换行符分隔每个组。
之后,sed将此换行符作为字段分隔符。
uniq --all-repeated=separate infile | sed ':A;$bB;/\n$/!{N;bA};:B;s/\n/ /g'