是否可以将awk脚本存储在shell变量中;例如:
export script="'{printf(\$2); printf("\"\\n\"");}'"
echo $script
'{printf($2); printf("\n");}'
当我直接调用脚本时,脚本可以正常运行:
awk '{printf($2); printf("\n");}' testFile.txt
prints proper output
当我尝试将脚本作为外壳变量传递时,遇到了问题。
awk $script testFile.txt
awk: syntax error at source line 1
context is
>>> ' <<<
missing }
awk: bailing out at source line 1
将变量用双引号引起来时,我会得到一个略有不同的错误
awk "$script" testFile.txt
awk: syntax error at source line 1
context is
>>> ' <<<
awk: bailing out at source line 1
我仍在确切地了解shell扩展的工作方式,对于在此缺少的内容,我将不胜感激。
答案 0 :(得分:4)
报价错误
export script='{printf($2); printf("\n");}'
awk "${script}" YourFile
答案 1 :(得分:0)
我不确定该如何找到正确的答案,但是一个非常丑陋的解决方法(可能取决于$script
的内容)是:
echo $script | awk '{print "awk "$0" testFile.txt"}' | bash
这只是在$script
语句中打印awk
的内容,然后由bash执行。我对此并不感到特别自豪,但是也许有帮助!
答案 2 :(得分:0)
键入
awk '{printf($2); printf("\n");}' testFile.txt
awk仅看到{printf($2); printf("\n");}
-外壳删除引号
(请参阅bash手册中的Quote Removal)
注意@NeronLeVelu的答案。