【问题标题】:Counting unique values in a column with a shell script使用 shell 脚本计算列中的唯一值
【发布时间】:2012-10-13 23:12:24
【问题描述】:

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

我过去曾成功地使用管道传输到 wc 的 *nix uniq 函数,但看起来我将不得不在这里使用 awk。

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

非常感谢!
礼来

【问题讨论】:

    标签: bash awk unique


    【解决方案1】:

    无需使用 awk。

    $ cut -f2 file.txt | sort | uniq | wc -l
    

    应该这样做。

    这使用选项卡是cut 的默认字段分隔符这一事实,因此我们将通过这种方式仅获取第二列的内容。然后通过sort 作为uniq 的前阶段,它会删除重复项。最后我们数一下行数,就是要找的数。

    【讨论】:

    • 这很棒。胡闹之后,我发现我可以通过这个 cat file.txt 找到任何骗子 | awk '{打印 $2}' |排序 |唯一的-c |排序 -n
    【解决方案2】:

    我去

    $ cut -f2 file.txt | sort -u | wc -l
    

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

    例如在Solaris docs:

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

    输入中的重复行不会 如果它们不相邻,就会被检测到。

    【讨论】:

      【解决方案3】:
      awk '{if($0~/Not Running/)a++;else if($0~/Running/)b++}END{print a,b}' temp
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多