我有一个带5列的制表符分隔文件,需要检索第2列中唯一行数的计数。我通常会使用Perl/Python执行此操作,但是我我被迫使用这个shell。使用shell脚本计算列中的唯一值
我已经成功地在过去使用* nix uniq函数传递给wc,但它看起来像我将不得不在这里使用awk。
任何意见将不胜感激。 (我曾问过一个类似的问题,关于使用awk的列检查,但这有点不同,我想分开它,所以如果将来有人有这个问题,这将在这里)
很多很多,谢谢!
Lilly
我有一个带5列的制表符分隔文件,需要检索第2列中唯一行数的计数。我通常会使用Perl/Python执行此操作,但是我我被迫使用这个shell。使用shell脚本计算列中的唯一值
我已经成功地在过去使用* nix uniq函数传递给wc,但它看起来像我将不得不在这里使用awk。
任何意见将不胜感激。 (我曾问过一个类似的问题,关于使用awk的列检查,但这有点不同,我想分开它,所以如果将来有人有这个问题,这将在这里)
很多很多,谢谢!
Lilly
不需要使用awk。
$ cut -f2 file.txt | sort | uniq | wc -l
应该这样做。
这使用了标签为cut
的默认字段分隔符的事实,因此我们将通过这种方式获取第2列中的内容。然后通过sort
作为uniq
的前期阶段,从而删除重复项。最后,我们计算线路,这是寻求的数字。
我去
$ cut -f2 file.txt | sort -u | wc -l
至少在一些版本中,uniq
依赖于被排序的输入数据(它只着眼于相邻的线)。
例如在Solaris docs:
的uniq的实用程序将读取的输入 文件比较相邻线路,和 写上 输出每个输入行的一个副本。第二个和后续的 副本重复相邻的输入 行将不会被写入。
如果输入中的重复行不相邻,则不会检测到 。
awk '{if($0~/Not Running/)a++;else if($0~/Running/)b++}END{print a,b}' temp
这很好。在搞乱之后我发现我可以通过这个 cat file.txt | awk'{print $ 2}'|排序| uniq -c |排序-n – 2010-05-06 14:49:59