如何只打印BASH中的独特线条?

时间:2014-05-19 14:37:42

标签: bash uniq

如何只打印那些在文件中只显示一次的行?例如,给出这个文件:

mountain
forest
mountain
eagle

输出就是这样,因为行mountain出现了两次:

forest
eagle
  • 如有必要,可以对行进行排序。

3 个答案:

答案 0 :(得分:33)

使用sortuniq

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