【发布时间】:2016-07-15 20:09:19
【问题描述】:
如何计算字段中给定数字范围内的数字出现的次数?
例如,原始文本foo.txt如下所示:
2,3,4,2,4
2,3,4,32,4
2,3,4,12,4
2,3,4,4,4
2,3,4,,4
2,3,4,15,4
2,3,4,15,4
我想计算字段 #4 中的数字落在以下范围内的次数:[0,10) 和 [10,20),其中下限包括在内,上限不包括在内。
结果应该是:
范围 0-10: 2 范围 10-20:3
下面是我的 awk 代码,但我在两个范围内都得到 8600001,
awk -f prog.awk foo.txt:
#!/usr/range/awk
# prog.awk
BEGIN {
FS=",";
$range1=0;
$range2=0;
}
$4 ~ /[0-9]/ && $4 >= 0 && $4 < 10 { $range1 += 1 };
$4 ~ /[0-9]/ && $4 >= 10 && $4 < 20 { $range2 += 1 };
END {
print $range1, "\t", $range2;
}
【问题讨论】:
-
您是指“数字”还是“数字”?数字是单个数字;当然,它们也是数字,但
10是由两位数字表示的单个数字。从第 4 列的预期输出来看,您计算的是数字,而不是数字。有趣的案例是空字段;很容易将其算作零而不是一个没有数字的空字段。 -
请注意
awk使用$表示字段编号,而不是一般变量。在初始化时,$range1 = 0将$0设置为0,因为range1没有定义,所以相当于零作为数字或空字符串。删除$。
标签: awk