使用shell脚本计算列中的唯一值

时间:2010-05-06 13:31:06

标签: bash awk unique

我有一个带有5列的制表符分隔文件,需要检索第2列中唯一行数的计数。我通常会使用Perl / Python来执行此操作,但我不得不使用shell进行此操作。

我过去成功地使用了* nix uniq函数管道到wc,但看起来我将不得不在这里使用awk。

任何建议都将不胜感激。 (我之前已经问过一个类似的问题,关于使用awk的列检查,但这有点不同,我想把它分开,所以如果将来有人有这个问题,这将是在这里)

非常感谢!
莉莉

3 个答案:

答案 0 :(得分:18)

无需使用awk。

$ cut -f2 file.txt | sort | uniq | wc -l

应该这样做。

这使用了tab是cut的默认字段分隔符的事实,因此我们将通过这种方式获得第二列的内容。然后,传递sort作为uniq的前期工作,删除重复项。最后,我们计算线,这是寻求的数字。

答案 1 :(得分:5)

我去了

$ cut -f2 file.txt | sort -u | wc -l

至少在某些版本中,uniq依赖于正在排序的输入数据(它只查看相邻的行)。

例如在Solaris docs

  

uniq实用程序将读取输入   文件比较相邻的行,和   写上每个输入行的一个副本   输出。第二次和成功   重复相邻输入的副本   不会写出行。

     

输入中的重复行不会   如果它们不相邻则被检测到。

答案 2 :(得分:0)

awk '{if($0~/Not Running/)a++;else if($0~/Running/)b++}END{print a,b}' temp