如何计算awk中几个范围内的行数?

时间:2015-12-31 21:04:36

标签: bash awk

我有一个包含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

我被困住,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

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,所以在除以10之前减1;你的箱子是10的倍数,所以乘以10.你也可以使用上限,所以加10。