我有以下 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: syntax error at source line 1 context is BEGIN { OFS = FS } { if($1 % 5 == 0) >>> {a[$1][ <<< awk: illegal statement at source line 1 awk: illegal statement at source line
我不确定该命令应该做什么,可能会创建某种 ID 查找文件。
最佳答案
您在非 GNU awk 中使用仅限 gawk 的语法。使用 gawk 或使用 a[$1,$2,$3]
或类似内容代替 a[$1][$2][$3]
并修复其余代码以匹配。不幸的是,您不仅没有提供任何预期的输出,而且您甚至没有提供可以产生任何输出的输入(您的 $1 值均不被 5 修改为 0),因此这显然未经测试,但是这可能是你想要的:
BEGIN {
FS=OFS="\t"
}
($1 % 5) == 0 {
a[$1 OFS $2 OFS $3] += $4
}
END {
for (key in keys) {
print key, a[key]
}
}
关于awk 语法错误 a[$1],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49236379/