![从 1 列获取唯一值并对接下来的 2 列求和](https://linux22.com/image/86583/%E4%BB%8E%201%20%E5%88%97%E8%8E%B7%E5%8F%96%E5%94%AF%E4%B8%80%E5%80%BC%E5%B9%B6%E5%AF%B9%E6%8E%A5%E4%B8%8B%E6%9D%A5%E7%9A%84%202%20%E5%88%97%E6%B1%82%E5%92%8C%20.png)
我有一个如下所示的文本文件:
A 500 100 ABC
B 200 100 BBB
B 200 100 ACC
D 150 235 CDD
A 500 100 RER
C 210 653 DDD
C 210 653 DWR
D 150 653 DDW
D 150 653 DER
我试图完成的任务是过滤掉第一个唯一名称,并获取其背后的所有值的总计(第 2 列和第 3 列的总和),例如:
A 1000 200
B 400 200
我使用以下 awk 行让前 2 个工作正常进行:
awk '{a[$1]+=$2} END {for(i in a) print i,a[i] }' file
结果是:
A 1000
B 400
我坚持在混合中添加第三列。有人有添加第 3 列的提示吗?
答案1
尝试一下这个经过测试的版本:
awk '{ colone[$1]+=$2; coltwo[$1]+=$3; } END { for (i in colone) { print i " " colone[i] " " coltwo[i]; }}' file
它使用关联数组,请参阅著名的教程Awk - 教程和简介 - 作者:Bruce Barnett
测试如下:
awk '{ colone[$1]+=$2; coltwo[$1]+=$3; } END { for (i in colone) { print i " " colone[i] " " coltwo[i]; }}' file
A 1000 200
B 400 200
C 420 1306
D 450 1541