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

Lil*_*ner 5 bash awk unique

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

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

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

非常感谢!
礼来公司

unw*_*ind 18

不需要使用awk.

$ cut -f2 file.txt | sort | uniq | wc -l
Run Code Online (Sandbox Code Playgroud)

应该这样做.

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


mar*_*ton 5

我去

$ cut -f2 file.txt | sort -u | wc -l
Run Code Online (Sandbox Code Playgroud)

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

例如,在Solaris文档中:

uniq实用程序将读取比较相邻行的输入文件,并在输出上写入每个输入行的一个副本.不会写入重复的相邻输入行的第二个和后续副本.

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