2012-07-20 51 views
0

我想將一個二維數組作爲參數傳遞給awk中的函數。我試過了傳遞一個二維數組名稱作爲參數在awk中運行

add(element1,element2,array) -> this "array" could be bigArray,smallArray etc 

function add(element1,element2,array) 
{ 
     if(!(element1 SUBSEP element2 in array)) 
     { 
      array[element1,element2] 
     } 

} 

add函數中的數組不斷變化。但是我收到一個錯誤,指出「嘗試使用標量參數數組作爲數組」。但同樣的事情,當我傳遞一個一維數組的作品。你能PPL請幫我對此

+0

我會在一段時間內編輯我的答案,但現在我已經測試了您的代碼並開始工作了!沒有錯誤。我的版本:** GNU Awk 4.0.1 ** – Birei 2012-07-20 23:23:57

+0

您使用的是什麼版本的AWK('gawk'或其他版本號及其版本號)? – 2012-07-20 23:36:55

回答

0

由於現在只是評論說,與下面的腳本進行了測試:

內容 script.awk

BEGIN { 
    a["one", "two"] = 1; 

    el1 = "one"; 
    el2 = "two"; 
    add(el1, el2, a); 

    el1 = "one"; 
    el2 = "three"; 
    add(el1, el2, a); 

    print "length of array: " length(a); 
} 

function add(element1,element2,array) 
{ 
     if(!(element1 SUBSEP element2 in array)) 
     { 
      printf "Elem1 -> %s\t\tElem2 ->%s\n", element1, element2 
      array[element1,element2] = 2; 
     } 
} 

運行它想:

awk -f script.awk 

隨着以下輸出:

Elem1 -> one   Elem2 ->three 
length of array: 2 
+0

哦,是的..我錯過了把聲明在那裏....非常感謝您的幫助.... – NandaKumar 2012-07-20 22:34:30

+0

我很抱歉,我沒有得到結果...背後的原因是傳遞給數組的參數沒有在任何地方聲明..所以函數認爲這是一個變量,而不是一個數組。我只是想知道是否有一種方法可以使函數將傳遞變量識別爲數組而不是變量。 – NandaKumar 2012-07-20 22:43:46

+0

我從鏈接描述的'length'函數中得到錯誤,但是OP的代碼有效在'gawk'中適合我。3.1.6。 OP的代碼適用於使用'SUBSEP'和'in'運算符訪問2D數組。 – 2012-07-20 23:36:17