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

时间:2016-02-02 00:12:21

标签: variables awk 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"

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

1 个答案:

答案 0 :(得分:2)

awk赋值也是一个带有返回值的表达式。如果你写

if (myVar = "optA")

您实际上检查了赋值的返回值optA,其中awlays的计算结果为“true”。你想要

if (myVar == "optA")

用于比较而不是作业。

此外,你不能有像这样的“裸体”陈述。您的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的默认值。