Chinaunix首页 | 论坛 | 博客
  • 博客访问: 57320
  • 博文数量: 28
  • 博客积分: 84
  • 博客等级: 民兵
  • 技术积分: 162
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-09 17:47
个人简介

try vuuv.github.io or somewhere else.

文章分类

全部博文(28)

文章存档

2013年(1)

2012年(5)

2011年(22)

我的朋友

分类:

2012-03-29 20:32:49

inode|beginnumber|endnumber|counts|
106|3363120000|3363129999|10000|
106|3368560000|3368579999|20000|
310|3337000000|3337000100|101|
310|3342950000|3342959999|10000|
310|3362120960|3362120961|2|
311|3313460102|3313469999|9898|
311|3313470000|3313499999|30000|
311|3362120962|3362120963|2|
 
要求将以上文本以inode为标记,对counts进行累加,并且统计出beginnumber的最小值和endnumber的最大值:
inode|beginnumber|endnumber|counts|
106|3363120000|3368579999|30000|
310|3337000000|3362120961|10103|
311|3313460102|3362120963|39900|
 
  1. awk -F'|' 'NR==1{print;next}{a[$1]?(a[$1]>$2?a[$1]=$2:0):(a[$1]=$2);b[$1]?(b[$1]<$3?b[$1]=$3:0):(b[$1]=$3);c[$1]+=$4}END{l=asorti(a,d);for(i=1;i<=l;i++)print d[i] FS a[d[i]] FS b[d[i]] FS c[d[i]] FS}' file
[解析]
  第一行直接打印。从第2行开始以$1为下标,建立3个数组,比较出$2的最小值,$3的最大值,然后把$4进行累加,最后进行排序后依次取出各项值。
  这其中运用了三目运算的嵌套,跟我们 if(){if(){}}else{} 的使用是一个道理,不要认为复杂,如果觉得模糊不清,仔细读懂流程控制。
阅读(625) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~