使用awk中其他列的引用计算列的总和

时间:2014-06-23 14:38:10

标签: bash awk

我有一个包含2列的文件。第一列包含一些关键字,第二列包含其大小。关键字可以重复如下:

data1 5
data2 7
data3 4
data2 6
data1 3
data2 8

我想计算用相同关键字绑定的大小总和。

例如,上述数据的输出将为:

data1 8
data2 21
data3 4

是否可以使用awk?

如果是,那么请指导我。

2 个答案:

答案 0 :(得分:4)

您可以使用数组执行awk

awk '{a[$1]+=$2} END {for (i in a) print i,a[i]}' file
data1 8
data2 21
data3 4

工作原理 a[$1]这个使用字段a创建名为#1的数组作为参考 a[$1]+=$2a[$1]=a[$1]+$2向数组#2添加字段a[$1]的值相同 for (i in a)循环遍历数组a[$1]中的所有值 print i,a[i]打印数组i和数组a[i]

的值

答案 1 :(得分:1)

如果你想保持输出与输入的顺序相同,那么使用这个稍长的awk:

awk '$1 in a{a[$1]+=$2; next} {b[++k]=$1; a[$1]=$2}
             END{for(i=1; i<=k; i++) print b[i], a[b[i]]}' file
data1 8
data2 21
data3 4