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

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

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2011-05-31 22:39:03

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{} 的使用是一个道理,不要认为复杂,如果觉得模糊不清,仔细读懂流程控制。
阅读(4595) | 评论(1) | 转发(1) |
0

上一篇:awk之数组的嵌套运用

下一篇:sed之N与P

给主人留下些什么吧!~~

ljwd10002011-11-24 14:50:48

看的有点晕,不过再看了几个小时后,再经过你的指点,终于能看懂一些了

谢谢