2011-06-30 109 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) 
}