我想将变量发送到我的外部.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"
有人可以帮助诊断问题吗?
答案 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 myVar
或printf "OptB"
,除非您明确不想要该换行符,否则您也可以使用print myVar
和print "OptB"
。
最后,FS=
分配看起来有点不合适,可能不需要,因为" "
是FS
的默认值。