【问题标题】:bash add up columns with same first columnbash 将具有相同第一列的列相加
【发布时间】:2012-11-30 17:12:48
【问题描述】:

我有一个文件,其名称在第一列,计数在第二列。它按名称排序。

    dan 3355
    dan 667
    dan 889
    frank 8
    frank 99
    frank 90
    ian 9

我想合并所有相同的名字并输出每个名字的总数:

    dan 4911
    frank 197
    ian 9

我知道我可以使用 uniq 来获取相同行的总数,但是如何保留数据中的计数?

【问题讨论】:

    标签: bash unix uniq


    【解决方案1】:

    你可以利用awk的关联数组:

     awk '{arr[$1]+=$2;} END {for (i in arr) print i, arr[i]}' filename
    

    【讨论】:

      【解决方案2】:

      使用 awk 的关联内存并不能保证名称在输出中的出现顺序与在输入中出现的顺序相同(并且对于大型数据集可能内存效率低下)。

      改用下面的

      awk '(NR==1){oldname=$1;s=$2;next};
           (oldname == $1){s=s+$2;next};
           {print oldname, s;oldname=$1s=$2;next}
           END{print oldname,s}'
      

      【讨论】:

        猜你喜欢
        • 2013-06-26
        • 1970-01-01
        • 2022-08-23
        • 1970-01-01
        • 2018-08-10
        • 1970-01-01
        • 2017-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多