开发者

Awk Iterate through several Arrays in a for loop

I have created an awk program to go through the columns of a file and count each distinct word and then output totals into separate files

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

but I don't know the appropriate syntax, so that the for loop will iterate through Field_Arr1, Field_Arr2, Field_Arr3, Field_Arr4?

I have tried using: i, $i, ${i}, {i}, "$i", and "i".

Am I trying the wrong approach or is there a way to change Field_Arr$i to Field_Arr1..4?

Thanks for the advice.


awk variables don't work that way; you'll have to do them individually by name, or use fake multidimensional arrays and parse out the components, something along the lines of:

{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])
  }
}


To count the frequencies for each column (3 in my example), try this

# 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)
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜