登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

SeaRiver Blog

实力才是你一生最好的依靠!

 
 
 

日志

 
 

awk之数组的输出和asorti排序输出  

2011-07-18 17:14:28|  分类: shell |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 
aaa 1
aaa 3
ccc 12
aaa 8
bbb 89
ccc 16
eee 12
ccc 11
eee 13
fff 16
ddd 56

要求对以上文本按第一列的名称进行第2列的求和,并且按升序排列打印。

 

  1. awk '{a[$1]+=$2}END{for(i in a){print i,a[i]}}' file
  2. aaa 12
  3. ccc 39
  4. eee 25
  5. bbb 89
  6. ddd 56
  7. fff 16

[解析]
  把$1为下标,把$2的值累加到以$1为下标的数组a的值上,然后用for(i in a)这最普通的常用的方式取出数组中的下标和其对应的值,但是这种方式是随机取出的。怎么能达到升顺输出呢?我们看下面的例子。

 

  1. awk '{a[$1]+=$2}END{l=asorti(a,b);for(i=1;i<=l;i++){print b[i],a[b[i]]}}' file
  2. aaa 12
  3. bbb 89
  4. ccc 39
  5. ddd 56
  6. eee 25
  7. fff 16
[解析]
  第一部分操作和上句一样,只是后面增加了awk的内置排序的函数asorti,然后通过for循环顺序依次取出a数组的下标和对应的值。

  评论这张
 
阅读(1038)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018