我有这个文件:
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]}'