awk语法错误a [$ 1]

时间:2018-03-12 13:24:20

标签: 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  1
5617    8342    15  1

等。

当我在输入文件上运行命令时,出现错误:

  

awk:源代码行1上下文的语法错误是BEGIN {OFS = FS} {   if($ 1%5 == 0)>>> {a [$ 1] [<<< awk:源头上的非法声明   第1行awk:源行的非法声明

我不确定该命令应该做什么,可能会创建某种ID查找文件。

1 个答案:

答案 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]
    }
}