awk - 将变量发送到 .awk 脚本并用作条件

awk - send variable to .awk script and use as conditional

我想将一个变量发送到我的外部 .awk 脚本以用作条件。但是,以下脚本不起作用。

这里首先是命令:

awk -v myVar="optA" -f /users/test/fixit.awk /users/test/input.txt > /users/test/output.txt

示例 fixit.awk 脚本是:

BEGIN { printf "TITLE:\nDocuments \n", myVar, FS=" "; }

if (myVar="optA")
      printf myVar
else 
      printf "OptB"

有人可以帮助诊断问题吗?

awk 赋值也是一个表达式,其中包含所赋值的 return 值。如果你写

if (myVar = "optA")

您实际上检查了赋值的 return 值 optA,它的计算结果为 "true"。你要

if (myVar == "optA")

用于比较而不是赋值。

此外,您不能有这样的 "naked" 语句。您的 if/else 子句必须是 BEGIN 块的一部分:

BEGIN {
    printf "TITLE:\nDocuments \n", myVar, FS=" "

    if (myVar=="optA")
          printf myVar
    else 
          printf "OptB"
}

执行一次,或者在一个单独的块中执行,如果它应该为每一行执行(虽然不太可能):

BEGIN { printf "TITLE:\nDocuments \n", myVar, FS=" " }

{
    if (myVar=="optA")
        printf myVar
    else 
        printf "OptB"
}

顺便说一句,你使用 printf 的方式没有多大意义:你可以做

print "TITLE:\nDocuments\n" myVar

printf "TITLE:\nDocuments\n%s\n", myVar

而对于 printf myVarprintf "OptB",除非您明确不想换行,否则您也可以使用 print myVarprint "OptB".

最后,FS= 赋值看起来有点不合适,可能不需要,因为 " "FS 的默认值。