是否可以将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扩展是如何工作的,我将不胜感激任何有关我在这里缺少的建议。
引用错误
export script='{printf($2); printf("\n");}'
awk "${script}" YourFile
我不确定这个问题的正确答案,但是非常难看(并且可能不稳定,取决于$script
内容)的解决方法是:
echo $script | awk '{print "awk "$0" testFile.txt"}' | bash
这只是在$script
语句中打印awk
的内容,然后由bash执行。我对此并不特别自豪,但也许有帮助!
当你输入
awk '{printf($2); printf("\n");}' testFile.txt
awk只看到{printf($2); printf("\n");}
- shell删除了引号(参见bash手册中的Quote Removal)
Heed @ NeronLeVelu的回答。