Linux中的awk数组的基本使用方法

2019-01-16 21:32:32刘景俊

1.awk数组描述

在其他的编程语言中,数组的下标都是从0开始的,也就是说,如果想反向引用数组中 的第一个元素,则需要引用对应的下标[0],在awk中数组也是通过引用下标的方法,但是在awk中数组的下标是从1开始的,在其他语言中,你可能会习惯于先“声明”一个数组,在awk中,则不用这样,直接为数组的元素赋值即可(其实如果自己给数组赋值,下标从1或者从0开始那就无所谓了!)

2.在声明数组时,可能值很多,命令太长,降低命令可读性,所以使用反斜杠“”,来进 行换行,效果是完全一样的,代码如下所示:


[zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three" ;arr[4]="four";print arr[3]}' three [zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";arr[4]="four";print arr[3]}' three

3.数组的元素设置为空,是允许的,当数组中没有某个元素而直接引用它的时候,它默认被赋值为空,所以判断某个元素是否存在,不能采用数组元素值为空的方法,而应该采用下面的方法:

[zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";if(4 in arr){print "four in this arr"}}' [zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";if(3 in arr){print "three in this arr"}}' three in this arr

也可以采用取反的方式(使用运算符!)

[zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";if(!(4 in arr)){print "four not in this arr"}}' four not in this arr

4.awk数组下标

在awk中数组的下标不仅可以是“数字”,还可以是“任意字符串”,其实,awk中的数组本来就是“关联数组”,之所以先用数字作为下标举例子是为了方便之前的习惯,能够有个好的过渡,不过,以数字作为数组的下标在某些场景有一定的优势,但是本质上也是“关联数组”,awk默认会把“数字”下标转换成“字符串”,所以它本质上还是一个使用字符串作为下标的“关联数组”

5.删除数组元素

使用 delete 可以删除数组中的元素,也可以使用 delete 删除整个数组


[zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three"; > delete arr[1];print arr[1]}' ____(空) [zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three"; print arr[1];print arr[3];delete arr;print arr[1]}' one three ____(空)

6.使用for循环遍历数组

语法:for(变量 in 数组名){ 代码语句 }

注:其中变量循环的是数组的下标

[zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";arr[4]="four"; > for ( i in arr){print arr[i]}}' four one two three #无序的打印数组元素,进一步证明其是“关联数组” #有序的打印数组元素 [zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";arr[4]="four"; for ( i=1;i<=4;i++){print arr[i]}}' one two three four