如何只打印那些在文件中只显示一次的行?例如,给出这个文件:
mountain
forest
mountain
eagle
输出就是这样,因为行mountain
出现了两次:
forest
eagle
答案 0 :(得分:33)
使用sort
和uniq
:
sort inputfile | uniq -u
-u
选项会导致uniq
仅打印唯一的行。引自man uniq
:
-u, --unique
only print unique lines
为了您的输入,它会产生:
eagle
forest
Obs:请sort
之前uniq -u
,因为uniq
对相邻的行进行操作。那么uniq -u
实际上做的是打印没有相同邻居线的线,但这并不意味着它们真的是唯一的。当您sort
时,所有相同的行都会组合在一起,只有文件中真正唯一的行将保留在uniq -u
之后。
答案 1 :(得分:9)
使用awk:
awk '{!seen[$0]++};END{for(i in seen) if(seen[i]==1)print i}' file
eagle
forest
答案 2 :(得分:4)
你的问题几乎得到了答案:
sort filename | uniq -u