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函式。我們將看到在後面的章節這些函式的使用。