Awk在for循环中迭代了几个Arrays

时间:2011-06-30 21:40:49

标签: 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?

感谢您的建议。

2 个答案:

答案 0 :(得分: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])
  }
}

答案 1 :(得分: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)
}