awk语法错误a[$1]
我有以下awk命令:awk语法错误a[$1],awk,syntax-error,Awk,Syntax Error,我有以下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
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}{
如果($1%5==0)>>{a[$1][您在非GNU awk中使用的是仅gawk语法。获取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]
}
}
有关更多详细信息,您可以查看上的gawk文档,您可以说
FS=OFS=subsp=“\t”
,然后说a[$1,$2,$3]+=$4
--我认为这更具可读性。这适用于gawk、mawk和Nawk。我同意这是一个非常合理的方法,但我觉得对于像OP这样的新手来说,这可能有点神秘,所以我想我会保持原样,并将其作为评论,谢谢。这在任何awk中都会起作用-他们都支持Subsp。