我有2列的文件,例如:
mm6 8
mm6 1
mm6 15
mm6 30
mm9 2
mm6 20
mm6 12
我试图在awk中创建一个脚本,以提取范围内有多少行。现在我有:
awk { if ($2 >= 1 && $2 <= 20) print $1 " " $2}
在输出中,我得到属于该范围的所有行
mm6 8
mm6 1
mm6 15
mm9 2
mm6 20
mm6 12
但是现在我试图用awk计算每10个单位的行数,直到达到确定的值,例如100。
我期望这样的输出:
mm6 10 2
mm6 20 3
mm9 10 1
说明:mm6的值在1-10 2之间,mm6的值在11-20 3之间,mm9的值在1-10 1之间
我被困住了,有人可以帮忙吗?
awk
营救!
使用您的第一个输入
$ awk '{a[$1 FS 10*int(($2-1)/10)+10]++}
END{for(k in a) print k,a[k]}' file
mm6 10 2
mm6 20 3
mm6 30 1
mm9 10 1
您可以在过滤器之前或之后添加过滤器。
说明:我们创建了一个密钥来计数并打印该密钥,并在末尾加上计数。关键是两部分,第一是标识符,第二是范围到容器的映射。例如,将0-9映射为0,将10-19映射为1,可以除以10并使用整数部分。您的范围是1-10,因此请先减去1再除以10;您的垃圾箱是10的倍数,因此乘以10。您也使用上限,因此加10。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句