首页 » shell » 正文

awk 数组的使用

好吧,今天成功的在家呆了一天,门口都没出去,是因为昨天公司发公文说气象台预报今天暴雪,大家不用来上班了–一个我做梦都想不到的决定,去年台风的时候我差点被吹跑了都没放假….,当然了,今天雪也没下多大

之前的时候在代码讨论区提问了一个awk的面试题(http://www.oschina.net/question/267431_79493),这几天正好百度google看了好多文章,好歹弄明白点了,现在把自己对awk的认识说明一下

awk 是一个以行为单位的,给我的感觉就是想数据库一样,你给他一个条件,说把 每行中带有“张三”的给我弄出来…然后awk就一行一行去排查,第一行,符合,显示,第二行,不符合pass….

然后感觉awk是一个更倾向统计方面的一个工具,比如,统计现在有一个文本test.txt,内容是一些数据格式这这个样子的

张三        语文      30

李四        语文      40

王五        语文      35

张三        数学      50

李四        英语      40

王五        数学      35

张三        英语     30

李四        数学      40

王五         英语      35

比如现在要求我们把上边的三个人的总分显示出来,当然,你愿意自己手动算也不麻烦….

现在把代码写出来

awk ‘{ a[$1]+=$3} END {for(i in a ) print i ,a[i] }’ test.txt

运行结果:

awk ‘{ a[$1]+=$3} END {for(i in a ) print i ,a[i] }’ test.txt

这句话其实很简单,意思就是说,先逐行跑一遍,然后执行 a[$1]+=$3 这个命令

好,然后awk就开始干活了

第一行执行就是a[王五]=a[王五]+35(数组自动创建,初始值0),这个时候a[王五]=35了

第二行执行的是a[张三]=a[张三]+50   这个时候a[张三]=50了

….

然后就是又碰到王五了….

第四行的时候 a[王五]=a[王五]+35 这个时候就是本来的35+现在的35了

….

然后这样跑完了,这个时候数组里有三个元素分别是a[张三],a[李四],a[王五],他们的值分别是他们各自成绩的总和

这个时候awk就弄完了,然后他一看命令后边还有一个END,它就知道跑完所有的行之后,还有干一件事情,就是后边的

for(i in a ) print i ,a[i]

这个的意思就是打印这个数组,和java 差不多,这个时候的i就是数组的key值,也就是张三,李四,王五,然后…

 

….

时间:2012-12-08 17:17:57

Zhiming Zhang

Senior devops at Appannie
一个奔跑在运维路上的胖子
Zhiming Zhang

Latest posts by Zhiming Zhang (see all)