Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3020449
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2012-03-09 22:55:17

cat file
A 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




  1. 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) |
给主人留下些什么吧!~~