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

Vil*_*age 18 bash uniq

如何仅打印在文件中出现一次的那些行?例如,给定此文件:

mountain
forest
mountain
eagle
Run Code Online (Sandbox Code Playgroud)

输出将是这个,因为该行mountain出现两次:

forest
eagle
Run Code Online (Sandbox Code Playgroud)
  • 如有必要,可以对行进行排序.

dev*_*ull 39

使用sortuniq:

sort inputfile | uniq -u
Run Code Online (Sandbox Code Playgroud)

-u选项将导致uniq仅打印唯一的行.引用自man uniq:

   -u, --unique
          only print unique lines
Run Code Online (Sandbox Code Playgroud)

为了您的输入,它产生:

eagle
forest
Run Code Online (Sandbox Code Playgroud)


anu*_*ava 12

使用awk:

awk '{!seen[$0]++};END{for(i in seen) if(seen[i]==1)print i}' file
eagle
forest
Run Code Online (Sandbox Code Playgroud)

  • @anubhava 刚刚在 300k 行上进行了测试。这个“awk”解决方案比“sort|uniq”快 8 倍。 (2认同)
  • 由于我们正在迭代,我们可以快速检查和打印只看到一次的那些。`awk '{!seen[$0]++};END{for(i in seen) if(seen[i]==1)print i}' 文件`但仍然+1。 (2认同)

Oli*_*ews 6

您的问题几乎得到了答案:

sort filename | uniq -u