从 1 列获取唯一值并对接下来的 2 列求和

从 1 列获取唯一值并对接下来的 2 列求和

我有一个如下所示的文本文件:

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

相关内容