首页 > Linux/Unix, 每日一日 > linux bash – awk数组操作详解

linux bash – awk数组操作详解

用awk进行文本处理,少不了就是它的数组处理。那么awk数组有那些特点,一般常见运算又会怎么样呢。我们先看下下面的一些介绍,结合例子我们会讲解下它的不同之处。在 awk 中数组叫做关联数组(associative arrays),因为下标记可以是数也可以是串。awk 中的数组不必提前声明,也不必声明大小。数组元素用 0 或空串来初始化,这根据上下文而定。

一、定义方法

1:可以用数值作数组索引(下标)

Tarr[1]=“cheng mo”
Tarr[2]=“800927”

2:可以用字符串作数组索引(下标)

Tarr[“first”]=“cheng ”
Tarr[“last”]=”mo”
Tarr[“birth”]=”800927”
直接使用print Tarr[1]即可得到对应的值。
二、数组相关函数
1.获取数组长度 length函数; print length(Tarr);
2.输出数组内容(无序,有序输出):
无序输出:for(k in Tarr){print k,Tarr[k]}
有序输出:for(k=1;k<=length(Tarr);k++){print k,Tarr[k];}//注意,数组下标从1开始。
3.判断键值存在以及删除键值:
键值是否存在:if( "11211" in Tarr){print "ok";}
删除键值:delete Tarr['key'];

三、实例
现在有一个这样形式的数据,实际数据量可能有几十万,取出若干条做示例:
UID, 终端, 性别

1154000 android m
1795120 symbian f
1297920 android f
2363460 symbian m
2125880 symbian m
2261760 iPhone f
2476040 symbian f
1721360 symbian f
1922600 symbian m
2363460 iPhone m
1922600 symbian m

第一列代表UID,第二列是用户的终端设备类型,第三列是用户性别,m代表男,f代表女。

该数据是用uniq处理后的数据,现在,需要统计使用各个终端的有多少人,男和女各有多少人。

使用如下的一条命令即可实现:

awk '{usr[$1]++; plat[$2]++; gender[$3]++}END{for(k in plat){print k,plat[k];} for(k in gender){print k,gender[k]} print count(usr);}' filename

先对每一行进行处理,以设备类型或性别为键值,进行累加;最后END循环输出键,值。注意数组从0开始,最后各个数值应当加上一个1才是正确数据。

  1. 还没有评论
评论提交中, 请稍候...

留言

可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 1 )
  1. 12月 26th, 2012 @ 10:45 | #1
    Pingback: AWK使用注意【更新中】 | T家园