测试关系数组下标是否存在,经测试无法使用 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返回值,因为函数对数组的任何操作在函数外部都是可见的。)
转载于:https://blog.51cto.com/sndapk/1220357