您的位置:首页 > 编程语言

awk编程——数组

2014-07-02 00:11 204 查看

数组

定义数组

aa=(1 2 3 4 5 6)
这些值会存储在以0为起始索引的连续位置上

aa[1]="www"

aa[2]="sss"
数组的第一个值、第二个值,以此类推。

关联数组

关联数组是指数组的索引不仅仅是数字,也可以是字符串,关联数组在索引和数组元素值之间建立起关联,对每一个数组元素,awk自动维护了一对值:索引和数组元素值。关联数组的值无需以连续的地址进行存储。awk的所有数组都是关联数组。
如:array[09]制定一个数组值,如果换成array[9]就不能指定与array[09]相同的值。
[root@ns1 ~]# awk 'BEGIN{data[10.15]="1200";CONVFMT="%d";printf("<%s>\n",data[10.15])}'
<>                      #所以此处结果输出为空值


split函数

split(a,b,c)函数将字符串以c为分隔符,将a字符串拆分为字符串数组元素存放在b中
split函数用法
[root@ns1 ~]# awk 'BEGIN {print split("abc/def/xyz",str,"/")}'
3                                                  #将字符串分成了3个元素
[root@ns1 ~]# cat array.awk
#!/bin/awk -f
BEGIN {FS=" "}
{
split($1,name,",");
for(i in name) print name[i]}                      #用for循环将name数组的内容打印出来
[root@ns1 ~]# cat sw
li  hao ss ssssssssss
zhang  ju ss ssssssssss
wang  bin ss sssssssssss
zhu  lin ss ssssssssss
[root@ns1 ~]# ./array.awk sw
li
zhang
wang
zhu


数组形式的系统变量

awk系统变量中有两个变量是以数组的形式提供的:ARGV和ENVIRON。ARGC是ARGV数组中元素的个数,从ARGV[0]开始,到ARGV[ARGC-1]结束。
#下面是脚本及素材内容
[root@ns1 ~]# cat ss.awk
#!/bin/awk -f
BEGIN {FS=",";
if(ARGC>2) {                                #ARGC未定义默认为0,小于2进入循环
name=ARGV[1];
delete ARGVp[1] }
else  {
while(!name){print "enter a name";
getline name< "-"}  #利用getline函数将输入值赋给name变量
}
}
$1~name {print $1,$3}                               #第一个域与姓名模糊匹配,成功输出第一、三个域
[root@ns1 ~]# cat sw
li hao,ss,11111111111
zhang ju,ss,2222222222
wang bin,ss,33333333333
zhu lin,ss,44444444444
#下面是脚本执行结果
[root@ns1 ~]# ./ss.awk sw
enter a name
li hao
li hao 11111111111
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  脚本 shell