我创建了一个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?
感谢您的建议。
答案 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)
}