测试关系数组下标是否存在,经测试无法使用 for,使用if
       if ("D" in num_grade)
               print "find ok"
       else
               print "error"
注:在关系数组中,所有的下标都被认为是字符串。可以使用数值或者是字符,不能是实数(如:data[1.23]="3.21"),即使下标是数值也被awk转换为字符串。

数组、函数split()
1、split()创建数组(下标从1开始),语法:
n = split(string, array, separator)
注:n为split返回的分割的数据元素的个数(访问最后一个元素array[n]);如果不指定separator,则使用FS;separator可以是正则表达式。
split("a,b,c",array,",")
split($1,array,"\t")

例:在获取流量的时候,如果想保证lo可以像其它网卡一样使用$2获取接收流量,需要使用以下正则

split(line,run,": +|:| +")

run[2]的值为5697

[root@centos-6 nagios]# cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo:    5697      79    0    0    0     0          0         0     5697      79    0    0    0     0       0          0

2、删除数组元素
 delete array[1]
3、多维数组同样支持测试下标语法:if ((i,j) in array)
注:i和j默认使用SUBSEB值(\0344)来分隔

4、系统变量数组
 ARGV和其它数组不同,该数组第一个数组元素下标为0,最后一个为ARGV-1;参数个数变量为 ARGC
 ENVIRON值为当前环境变量的值,下标为变量名


补充1:自定义函数

awk自定义函数语法:

function name(parameter-list) {

statements

}

注:

1、函数内部的变量如果不在parameter-list的参数列表中指定,默认为全局变量;

2、指定多个参数使用逗号分开,一般情况下传递给函数的参数与函数的局部变量用多个空格分开,如:

function sort(ARRAY, NUM,  i, j, tmp) {

......

}

3、通常使用return返回一个值(注:对数组的操作不需要return expression返回值,因为函数对数组的任何操作在函数外部都是可见的。)