cat fileA 235
B 698
C 1425
A 980
C 800
B 120
A 1000
C 1578
B 1899
C 2000
要求统计每500为一个阶段,第二列的数量,大于1500的算一起:
name 0-499 500-999 1000-1499 >=1500
A 1 1 1 0
B 1 1 0 1
C 0 1 1 2
- awk 'BEGIN{print "name 0-499 500-999 1000-1499 >=1500"}{a[$1];i=int($2/500);if(i<3)b[$1,i]++;else b[$1,3]++}END{for(j in a){printf j" ";for(k=0;k<=3;k++)printf b[j,k]+0" ";print ""}}' file | column -t
[解析] 这题最巧妙的地方在于对各个阶段的判断,这里利用对500取整,然后判断是否超过了1500,再利用数组记数,最后再用for循环输出。
阅读(2886) | 评论(0) | 转发(1) |