2011-06-30 76 views
1

我已經創建了一個awk程序要經過一個文件的列數和每個不同的單詞,然後輸出總數爲獨立的文件在awk迭代通過在多個陣列用於循環

awk -F"$delim" {Field_Arr1[$1]++; Field_Arr2[$2]++; Field_Arr3[$3]++; Field_Arr4[$4]++}; 
END{\ 
    # output fields 
    out_field1="top_field1" 
    out_field2="top_field2" 
    out_field3="top_field3" 
    out_field4="top_field4" 

    for(i=1; i <= NF; i++) 
    { 
     for (element in Field_Arr$i) 
     { 
      print element"\t"Field_Arr$i[element] >>out_field$i; 
     } 
    } 
}' inputfile 

但我不知道適當的語法,以便for循環遍歷Field_Arr1,Field_Arr2,Field_Arr3,Field_Arr4?我試過使用:i,$ i,$ {i},{i},「$ i」和「i」。

我正在嘗試錯誤的方法或是否有方法將Field_Arr $ i更改爲Field_Arr1..4?

感謝您的意見。

回答

3

awk變量不工作的方式;你必須單獨做名字,或者使用假的多維數組並解析出這些組件,沿着以下幾條線:

{Field_Arr[1, $1]++; Field_Arr[2, $2]++; Field_Arr[3, $3]++; Field_Arr[4, $4]++} 
END { 
    for (elt in Field_Arr) { 
    split(elt, ec, SUBSEP) 
    print ec[2] "\t" Field_Arr[elt] >> ("top_field" ec[1]) 
    } 
} 
+0

謝謝,這工作完美(無痛)! – user823848

1

計數頻率(在我的例子3)每一列,試試這個

# Print list of word frequencies 
function p_array(t,a) { 
    print t 
    for (i in a) { 
     print i, a[i] 
    } 
} 

{ 
    c1[$1]++ 
    c2[$1]++ 
    c3[$1]++ 
} 
END { 
    p_array("1st col",c1) 
    p_array("2nd col",c2) 
    p_array("3rd col",c3) 
}