如何使用awk仅对列范围求和?

时间:2016-02-27 18:03:55

标签: linux awk

我有这个文件:

mm1 17601901 17630939 -1.3
mm1 20802968 20820312 1.1
mm1 24612407 24612700 -1.1
mm1 34459762 34475733 1.8

我试图使用第二列作为参考,将第四列中的值相加,例如每100万个。

我正在使用这个代码karakfa告诉我:

awk '{a[$1 FS 1000000*int(($2-1)/1000000)+500000];sum+=$4} END{for(k in a) print k,a[k],sum}'

它输出了我:

mm1 20500000  2150.1
mm1 34500000  2150.1
mm1 36500000  2150.1
mm1 37500000  2150.1

但它汇总了文件中的所有列,而不仅仅是我创建的范围。

如果我改用++,它会计算该范围内的实例数 :

awk '{a[$1 FS 1000000*int(($2-1)/1000000)+500000];++} END{for(k in a) print k,a[k],sum}'

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的sum需要 数组(每个范围一个元素):

awk '{sum[$1 FS 1000000*int(($2-1)/1000000)+500000]+=$4} END{for(k in sum) print k,sum[k]}'