我该如何打印出在文件中只出现一次的行?例如,给定以下文件:
mountain
forest
mountain
eagle
输出结果将会是这样,因为mountain
这一行出现了两次:
forest
eagle
- 如果必要,这些行可以被排序。
使用sort
和uniq
命令:
sort inputfile | uniq -u
-u
选项会导致uniq
只打印重复的行。引用自man uniq
:
-u
选项会导致uniq
只打印唯一的行。引用自man uniq
:
-u, --unique
only print unique lines
对于您的输入,它会产生:
eagle
forest
提示:在执行uniq -u
之前记得进行sort
,因为uniq
只作用于相邻的行。所以实际上uniq -u
打印的是没有相同相邻行的行,但这并不意味着它们是真正独特的。当你进行sort
时,所有相同的行会被分组在一起,只有文件中真正独特的行会在uniq -u
之后保留。
使用 awk:
awk '{!seen[$0]++};END{for(i in seen) if(seen[i]==1)print i}' file
eagle
forest
awk
解决方案比 sort|uniq
快了 8 倍。 - clt60awk '{!seen[$0]++};END{for(i in seen) if(seen[i]==1)print i}' file
但还是+1。 - jaypal singhsort filename | uniq -u
这条命令将会按行排序并去重文件中的内容,然后只保留出现一次的行。