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

问题描述 投票:14回答:3

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

mountain
forest
mountain
eagle

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

forest
eagle
  • 如有必要,可以对行进行排序。
bash uniq
3个回答
9
投票

使用awk:

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

36
投票

使用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之后。


4
投票

你几乎在你的问题中得到了答案:

sort filename | uniq -u

© www.soinside.com 2019 - 2024. All rights reserved.