【问题标题】:Match values in different lines using awk使用 awk 匹配不同行中的值
【发布时间】:2014-05-22 09:44:58
【问题描述】:

我的文件类似于以下示例:

8  1
8  2
17 4
17 5
17 2
19 1
19 4
19 3
19 11

我想匹配第一列(具有相同的值)并使用awk对第二列进行求和,如下所示。

结果是

8 3
17 11
19 19

等等。

我们将非常感谢您的帮助。

【问题讨论】:

    标签: awk


    【解决方案1】:
    $ awk '$2>0{sum[$1]+=$2} END{for (i in sum) {print i,sum[i]}}' input | sort -n
    8 3
    17 11
    19 19
    

    实施说明:

    • awk 从文件中读取每一行时,$2>0{sum[$1]+=$2} 命令会导致部分和被保存。

    • 文件读取完毕后,END{for (i in sum) {print i,sum[i]}}命令打印出结果。

    • 因为 awk 的数组是无序的,所以 awk 的输出被馈送到 sort -n 以产生视觉上令人愉悦的排序输出。

    更好的格式

    要生成右对齐列的输出,请使用printf 代替print

    $ awk '$2>0{sum[$1]+=$2} END{for (i in sum) {printf "%3s%3s\n",i,sum[i]}}' input | sort -n
      8  3
     17 11
     19 19
    

    【讨论】:

      猜你喜欢
      • 2013-02-12
      • 1970-01-01
      • 2021-12-08
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      相关资源
      最近更新 更多