2014-06-06 41 views
2

是否可以使用變量作爲真正的多維數組的索引?我有一個通過Cisco配置文件運行的GAWK 4.1.1腳本,我想創建一個數組,看起來像:gawk 4 - 使用變量作爲數組索引

myArray的[站點代碼] [交換機名稱]

如果站點代碼和交換機名稱從文件名拉正在處理,然後額外的索引超出了每個交換機的基礎上計算各種事情。對於上面的這兩個索引,我想將索引和值都設置爲相同的變量。所以,最終我能有一個數組,看起來像:

myarray[nyc01][switch01][Vlan100][192.168.100.1] 
myarray[nyc01][switch01][Vlan101][192.168.101.1] 
myarray[nyc01][switch02][Vlan200][192.168.200.1] 

下面的代碼說明了什麼,我試圖做的:

#!/bin/bash 
awk '{ 
var1="variable1" 
var2="variable2" 
array[var1]=var1 
array[var1][var2]=var2 
print array[var1][var2] 
}' 

我得到這個錯誤:

awk: cmd. line:6: (FILENAME=- FNR=1) fatal: attempt to use scalar `array["variable1"]' as an array 

我排序明白爲什麼會發生。我已經聲明var1和var2是標量變量。但是有什麼我正在嘗試做的工作?

+0

array [var1] = var1:左手si de的作業是陣列的一排(如果您有3D陣列,則爲平面),rhs是單個值。你是否試圖一次性分配整個n-1尺寸? – user1666959

回答

1

當您設置array[var1] = var1時,您將設置該元素以保存標量。
然後你試着array[var1][var2] = var2,你想重新定義存儲在array[var1]處的那種東西。從報價the manual

The type of any element that has already been assigned cannot be changed by assigning a value of a different type. You have to first delete the current element, which effectively makes gawk forget about the element at that index:

(重點煤礦)

我看到,如果你嘗試在其他命令你的任務,你會得到一個不同的,但相應的錯誤信息

% awk 'BEGIN {v1="foo"; v2="bar";a[v1][v2] = v2; a[v1]=v1}' 
awk: cmd. line:1: fatal: attempt to use array `a["foo"]' in a scalar context 

你可以只是堅持與模擬多維陣列:

$ awk 'BEGIN {v1="foo"; v2="bar"; a[v1] = v1; a[v1,v2] = v2; print a[v1,v2]}' 
bar 
+0

我現在才意識到這一點。我想出於某種原因,我可以使數組[var1]包含標量值和另一個數組 - 數組[var1] [var2]。一旦我意識到這一點,並大聲對自己說,我感到非常愚蠢。我實際上從手冊中讀到了這一點,但是它的重要性讓我無法理解。謝謝你的迴應:) – ahxn81

+0

我注意到你從未接受任何問題的答案。要成爲社區負責任的成員,請閱讀http://stackoverflow.com/help/asking –