是否可以将脚本传递给shell变量中的awk?

问题描述 投票:1回答:3

是否可以将awk脚本存储在shell变量中;例如:

export script="'{printf(\$2); printf("\"\\n\"");}'"

echo $script
'{printf($2); printf("\n");}'

当我直接调用它时脚本正常运行:

awk '{printf($2); printf("\n");}' 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扩展是如何工作的,我将不胜感激任何有关我在这里缺少的建议。

shell awk
3个回答
4
投票

引用错误

export script='{printf($2); printf("\n");}'
awk "${script}" YourFile

0
投票

我不确定这个问题的正确答案,但是非常难看(并且可能不稳定,取决于$script内容)的解决方法是:

echo $script | awk '{print "awk "$0" testFile.txt"}' | bash

这只是在$script语句中打印awk的内容,然后由bash执行。我对此并不特别自豪,但也许有帮助!


0
投票

当你输入

awk '{printf($2); printf("\n");}' testFile.txt

awk只看到{printf($2); printf("\n");} - shell删除了引号(参见bash手册中的Quote Removal

Heed @ NeronLeVelu的回答。

© www.soinside.com 2019 - 2024. All rights reserved.