【发布时间】: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
我的文件类似于以下示例:
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
$ 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
【讨论】: