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 myVar
或 printf "OptB"
,除非您明确不想换行,否则您也可以使用 print myVar
和 print "OptB"
.
最后,FS=
赋值看起来有点不合适,可能不需要,因为 " "
是 FS
的默认值。
我想将一个变量发送到我的外部 .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 myVar
或 printf "OptB"
,除非您明确不想换行,否则您也可以使用 print myVar
和 print "OptB"
.
最后,FS=
赋值看起来有点不合适,可能不需要,因为 " "
是 FS
的默认值。