我有一个包含2列的文件。第一列包含一些关键字,第二列包含其大小。关键字可以重复如下:
data1 5
data2 7
data3 4
data2 6
data1 3
data2 8
我想计算用相同关键字绑定的大小总和。
例如,上述数据的输出将为:
data1 8
data2 21
data3 4
是否可以使用awk?
如果是,那么请指导我。
答案 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]+=$2
与a[$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