是否可以将脚本传递给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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 awk 脚本中使用 shell 变量?

如何将 shell 脚本中的结果传递给 Job 中的变量

将外部参数传入awk命令的方法汇总

利用awk赋值

将变量传递给 vagrant 中的 shell 脚本配置器

shell脚本,awk在需要的行上打打印空行。