如何仅打印在文件中出现一次的那些行?例如,鉴于此文件:
mountain
forest
mountain
eagle
输出将是这个,因为行mountain
出现两次:
forest
eagle
使用awk:
awk '{!seen[$0]++};END{for(i in seen) if(seen[i]==1)print i}' file
eagle
forest
使用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
之后。
你几乎在你的问题中得到了答案:
sort filename | uniq -u