我有一个包含5列的制表符分隔文件,需要检索第2列中唯一行的数量。通常我会使用Perl/Python来完成这个任务,但是这次我被迫使用shell。过去我曾经成功地使用 *nix uniq 函数管道传输到 wc 命令,但现在看来我必须在这里使用 awk 命令。如果您有任何建议,将不胜感激。(我之前曾经提出过类似问题,关于使用awk检查列,但这次稍有不同,我想把它单独分离出来,以便将来有人遇到这个问题时可以找到这里)。非常感谢!
Lilly
Lilly
不需要使用awk。
$ cut -f2 file.txt | sort | uniq | wc -l
应该这样做。
这是利用制表符是cut
的默认字段分隔符的事实,因此我们将以这种方式仅获取第二列的内容。然后通过sort
进行一次预处理,以便在uniq
中去除重复项。最后,我们计算行数,这就是所需的数字。
我选择
$ cut -f2 file.txt | sort -u | wc -l
至少在某些版本中,uniq
要求输入数据已排序(它仅查看相邻的行)。
例如,在Solaris文档中:
uniq 实用程序将读取一个输入文件,比较相邻的行,并将每个输入行的一个副本写入输出。不会写入重复的相邻输入行的第二个及后续副本。
如果重复的行不相邻,则不会检测到输入中的重复行。
awk '{if($0~/Not Running/)a++;else if($0~/Running/)b++}END{print a,b}' temp