AWK和BASH:意外令牌'('附近的语法错误

时间:2019-09-21 20:39:25

标签: bash shell awk

当我将此命令粘贴到终端(ubuntu 18.04)中时:

cat file.txt | awk -F, BEGIN { OFS = FS } {if ($2 == "") $2 = last2; else last2 = $2 print}

我得到:

bash: syntax error near unexpected token `('

该如何解决?

1 个答案:

答案 0 :(得分:3)

使用问题中的awk命令,shell将解析每个单词和字符,并将其作为单独的脚本传递给awk命令,而不是作为单独的脚本。而且某些字符组合在外壳中很特殊,例如括号或$2之类的环境变量扩展。

当然这不是您想要的,而是应该将所有代码作为单个 unexpanded 字符串传递给awk(您不希望shell尝试扩展) $2),为此您需要用单引号将代码括起来,如

awk -F, 'BEGIN { OFS = FS } {if ($2 == "") $2 = last2; else last2 = $2 print}'