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

Bash 使用shell脚本计算列中的唯一值,bash,awk,unique,Bash,Awk,Unique,我有一个以制表符分隔的文件,有5列,需要从第2列检索唯一行数的计数。我通常会使用Perl/Python来实现这一点,但我不得不使用shell来实现这一点 我在过去成功地使用了通过管道连接到wc的*nix uniq函数,但看起来我必须在这里使用awk 如有任何建议,将不胜感激。(我以前曾问过一个类似的问题,关于使用awk进行列检查,但这有点不同,我想把它分开,所以如果将来有人有这个问题,这将在这里) 非常感谢 礼来无需使用awk $ cut -f2 file.txt | sort | uniq |

我有一个以制表符分隔的文件,有5列,需要从第2列检索唯一行数的计数。我通常会使用Perl/Python来实现这一点,但我不得不使用shell来实现这一点

我在过去成功地使用了通过管道连接到wc的*nix uniq函数,但看起来我必须在这里使用awk

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

非常感谢
礼来无需使用awk

$ cut -f2 file.txt | sort | uniq | wc -l
我应该这样做

这使用了这样一个事实,即tab是
cut
的默认字段分隔符,因此我们将通过这种方式仅获取第二列的内容。然后,传递
排序
作为
uniq
的前置阶段,它将删除重复项。最后,我们数一数行数,这是寻找的数字。

$ cut -f2 file.txt | sort -u | wc -l
至少在某些版本中,
uniq
依赖于正在排序的输入数据(它只查看相邻的行)

例如:

uniq实用程序将读取一个输入 比较相邻行的文件,以及 将每个输入行的一份副本写在 输出。第二个是成功的 重复相邻输入的副本 行将不会被写入

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


这太棒了。在混乱之后,我发现我可以找到这个cat file.txt | awk{print$2}| sort | uniq-c | sort-n的任何副本
awk '{if($0~/Not Running/)a++;else if($0~/Running/)b++}END{print a,b}' temp