码迷,mamicode.com
首页 > 编程语言 > 详细

使用字段的值作为数组下标

时间:2015-05-08 09:42:33      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:awk   awk数组   awk数组下标   

对于awk命令,任何表达式都可以用作数组的下标。所以,也可以用字段作下标。下面的例子中的程序用于计算所有名字在第2 个字段出现的次数,并引入了一种for循环的新形式。

for(index_value in array) statement

在前面介绍的例子中,END块中出现的for循环的工作过程如下:变量name被设为count数组的索引值,在每次for循环的迭代中,执行print操作,首先打印的是索引值,然后是保存在元素中的值(打印输出的次序无法确定)。

范例

cat datafile4
4234 Tom 43
4567 Arch 45
2008 Eliza 65
4571 Tom 22
3298 Eliza 21
4622 Tom 53
2345 Mary 24
$ awk ‘{count[$2]++}END{for(name in count)print name,count[name]}‘
Tom 3
Arch 1
Eliza 2
Mary 1

说明:这条awk语句首先用记录的第2个字段作为数组count的下标。数组的下标随第2个字段的变化而变化,所以数组count 的第一个下标是Tom。而count["Tom"]中保存的值是1。然后,count["Arch"]、count["Eliza"]和count["Mary"]相继被设为10当在第2个字段中再次出现Tom时,count["Tom"]的值将被加1,于是它目前的值是2。Arch、Eliza和Mary再次出现时其过程类似。

范例

$ awk ‘{dup[$2]++; if(dup[$2] > 1){name[$2]++}}\
END{print "The duplicates were"\
for(i in name){print i,name[i]}}‘
 datafile4
Tom 2
Eliza 2

说明:数组dup的下标是第2个字段的值,即人名。dup数组中元素的值最初都是0,每处理一条记录,相应元素的值就加1。如果名字重复出现,则对应该下标的元素值就会变成2,并相应地逐渐增加。如果dup数组中某个元素的值大于1,就会创建一个名为name的新数组,也是以第2个字段的值作为下标,用于记录出现次数大于1的人名。


参考资料:http://www.linuxawk.com/jiaocheng/274.html

使用字段的值作为数组下标

标签:awk   awk数组   awk数组下标   

原文地址:http://blog.csdn.net/xiyangyang052/article/details/45566431

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!