我的文件如下例所示:
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
等等。
我们非常感谢您的帮助。
答案 0 :(得分:3)
$ 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