awk的数组跟其他程序设计语言的数组有所不同:
1、不需要正式定义,一个数组在使用时被定义;
2、数组元素的初始值为0或空字符串,除非他们被显示的指定初始化;
3、数组可以自动扩展;
4、下标可以使字符串。
------------------------------------------------------------------
awk中,数组可以通过下标赋值,如下:
arr[0]=123
也可以使用字符串作为下标:
arr["one"]=123
-----------------------------------------------------------------------------
split函数的返回值是数组长度。
zoer@ubuntu:~$ echo ""|awk 'BEGIN{a="here is test";len=split(a,arr," ")}{print len}'
3
-----------------------------------------------------------------------------
求数组长度的方法:
length(arr)
--------------------------------------------------------------------------------
输出数组内容
输出数组内容的时候,可以使用for ... in ...的形式。由于awk的数组是关联数组,所以用这种形式输出是乱序的。
root@ubuntu:/home/zoer# echo ''|awk 'BEGIN{a["one"]=1;a["two"]=2;a["three"]=3;}{for (k in a)print a[k]}'
3
1
2
如果想要得到有序数组,那么需要通过下标来获得。注意:awk的数组下标是从1开始的。与c++或者java语言的不同。
-------------------------------------------------------------------------
判断一个元素是不是在数组中
使用如下形式:
if ( k in arr)
通过这种方法判断数组中是否包含”key”键值。使用例子如下:
zoer@ubuntu:~$ echo ""|awk 'BEGIN{a="here is test";len=split(a,arr," ")}{if(1 in arr)print "kkkkk"}'
kkkkk
zoer@ubuntu:~$ echo ""|awk 'BEGIN{arr["one"]=1;arr["two"]=2;arr["third"]=3;}{if("one" in arr)print arr["one"]}'
1
上面两个例子分别演示了的数字下标和指定的字符串下标。
------------------------------------------------------------------
删除数组元素:
delete arr['key']可以用于删除数组元素
zoer@ubuntu:~$ echo ""|awk 'BEGIN{a="here is test";len=split(a,arr," ")}{delete arr[1];for(k in arr)print arr[k]}'
is
test
上面的这个例子,删除了下标为1的元素,那么here就没有输出出来了。
也可以使用delete arr来删除整个数组。
----------------------------------
本页也直接展示了awk中,split的用法。
-----------------------------------------
关联数组
在awk中,数组都是关联数组。那么什么是关联数组呢?关联数组在数组下标和元素之间建立了一种关联。对于数组中的每个元素都有两个相关的值:元素的下标和元素的值。这些元素不像传统的数组那样按照一定的顺序存储。尽管在awk中数组下标也可以是数据行的 。但是这些下表的意义和其他编程语言中的所表示的意义不同----他们不一定代表数据在数组中的位置。
有时候,数值型下标和字符串型下标之间的区别还是很大的。比如说使用04这个字符串作为下标,那么就不能用数字4去定位这个元素。