AWK数组 - Awk教程

AWK关联数组最好的事情之一就是 - 索引不必是连续的设定的数; 我们可以使用字符串或数字作为数组的索引。也没有需要事先声明数组的大小- 数组可以在运行时扩展/收缩。本教程介绍AWK数组的例子。

下面是数组的语法:

array_name[index]=value

其中,array_name是数组的名称,index是数组索引,value是任意值分配给数组的元素。

创建

要获得有关数组的详细信息,我们来创建和访问数组的元素。

[jerry]$ awk 'BEGIN {
fruits["mango"]="yellow";
fruits["orange"]="orange"
print fruits["orange"] "\n" fruits["mango"]
}'

在执行上面的代码后,得到以下结果:

orange
yellow

在上面的例子中,已经声明数组即fruits,其索引是水果的名称并且值是水果颜色。要访问数组元素,使用array_name[index]格式。

删除

为了插入我们使用赋值运算符。同样,可以使用delete语句从数组中删除元素。下面是 delete 语句的语法:

delete array_name[index]

下面的示例显示删除 orange 元素因此命令没有显示任何输出。

[jerry]$ awk 'BEGIN {
fruits["mango"]="yellow";
fruits["orange"]="orange";
delete fruits["orange"];
print fruits["orange"]
}'

多维数组

AWK只支持一维数组。但是我们可以很容易地模拟使用一维阵列本身的多维阵列。

例如下面是3×3的三维阵列:

100 200 300
400 500 600
700 800 900

另外,在上述示例array[0] [0]存储100,array[0][1]存储200等。要在位置array[0] [0]存储100,我们可以使用下面的语法:

array["0,0"] = 100

虽然我们已经给定0,0为索引,这些都不是两个索引。在现实中,它只是一个索引以字符串0,0。

下面简单的例子模拟2-D数组:

[jerry]$ awk 'BEGIN {
array["0,0"] = 100;
array["0,1"] = 200;
array["0,2"] = 300;
array["1,0"] = 400;
array["1,1"] = 500;
array["1,2"] = 600;
# print array elements
print "array[0,0] = " array["0,0"];
print "array[0,1] = " array["0,1"];
print "array[0,2] = " array["0,2"];
print "array[1,0] = " array["1,0"];
print "array[1,1] = " array["1,1"];
print "array[1,2] = " array["1,2"];
}'

在执行上面的代码后,得到以下结果:

array[0,0] = 100
array[0,1] = 200
array[0,2] = 300
array[1,0] = 400
array[1,1] = 500
array[1,2] = 600

我们还可以在排序其元素/索引于阵列执行各种操作。为了达到这个目的,可以使用AWK的asort以及asorti函数。我们将看到在后面的章节这些函数的使用。