awk 语法错误 a[$1]

标签 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: 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/

相关文章:

linux - 根据特定顺序重新排列文件中模式后的行

bash - 将文件重新排列成三列

syntax-error - 错误消息-初始化列表时的 “closing bracket expected”

python - 获取 "no module named builtin"导入错误

bash - 如果线上的值相同则相加

awk - 如何在awk中将 float 设为整数

bash - 查找并打印列值重复 n 次的行

php - 为什么这段 PHP 代码在一台机器上运行而在另一台机器上失败?

javascript - 如果 return 和 { 之间有换行符,为什么 JS 会抛出语法错误

javascript - Nodemailer 错误无法修复