是否可以将脚本传递给shell变量中的awk?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以将脚本传递给shell变量中的awk?相关的知识,希望对你有一定的参考价值。
是否可以将awk脚本存储在shell变量中;例如:
export script="'{printf($2); printf(""\n"");}'"
echo $script
'{printf($2); printf("
");}'
当我直接调用它时脚本正常运行:
awk '{printf($2); printf("
");}' testFile.txt
prints proper output
当我尝试将脚本作为shell变量传递时,我遇到了问题。
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扩展是如何工作的,我将不胜感激任何有关我在这里缺少的建议。
答案
引用错误
export script='{printf($2); printf("
");}'
awk "${script}" YourFile
另一答案
我不确定这个问题的正确答案,但是非常难看(并且可能不稳定,取决于$script
内容)的解决方法是:
echo $script | awk '{print "awk "$0" testFile.txt"}' | bash
这只是在$script
语句中打印awk
的内容,然后由bash执行。我对此并不特别自豪,但也许有帮助!
另一答案
当你输入
awk '{printf($2); printf("
");}' testFile.txt
awk只看到{printf($2); printf("
");}
- shell删除了引号(参见bash手册中的Quote Removal)
Heed @ NeronLeVelu的回答。
以上是关于是否可以将脚本传递给shell变量中的awk?的主要内容,如果未能解决你的问题,请参考以下文章