我有一个带有5列的制表符分隔文件,需要检索第2列中唯一行数的计数。我通常会使用Perl / Python来执行此操作,但我不得不使用shell进行此操作。
我过去成功地使用了* nix uniq函数管道到wc,但看起来我将不得不在这里使用awk。
任何建议都将不胜感激。 (我之前已经问过一个类似的问题,关于使用awk的列检查,但这有点不同,我想把它分开,所以如果将来有人有这个问题,这将是在这里)
非常感谢!
莉莉
答案 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