我有一个如下所示的文本文件:
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