我有以下awk命令:
awk -F $'\t'
'BEGIN
{ OFS = FS }
{ if($1 % 5 == 0) {a[$1][$2][$3]+=$4; } }
END
{for (i in a) for (j in a[i]) for (k in a[i][j]) print i, j, k, a[i][j][k]}'
包含4个元组ID的列表的输入文件:
9374 2150 26 1
7477 1808 58 1
4972 787 28 1
5617 8342 15 1
等。
当我在输入文件上运行命令时,出现错误:
awk:源代码行1上下文的语法错误是BEGIN {OFS = FS} { if($ 1%5 == 0)>>> {a [$ 1] [<<< awk:源头上的非法声明 第1行awk:源行的非法声明
我不确定该命令应该做什么,可能会创建某种ID查找文件。
答案 0 :(得分:2)
你在非GNU awk中使用gawk-only语法。得到gawk或使用a[$1,$2,$3]
或类似代替a[$1][$2][$3]
并修复其余代码以匹配。不幸的是,您不仅没有提供任何预期的输出,而且您甚至没有提供可能产生任何输出的输入(由5评估为0的$ 1值都没有)所以这显然未经测试但是它可能是你想要的:
BEGIN {
FS=OFS="\t"
}
($1 % 5) == 0 {
a[$1 OFS $2 OFS $3] += $4
}
END {
for (key in keys) {
print key, a[key]
}
}