我有这个文件:

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

我试着将第四列中的值相加,以一个范围为基础,例如每一百万个值,使用第二列作为引用。
我用的是卡拉卡法教我的:
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}'

我做错什么了?

最佳答案

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

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

10-07 19:32