我一直在使用bash脚本(script.sh),它使用各种awk脚本(script1.awk,script2.awk),这些脚本是在"运行时"定制的,例如通过替换值.我一直在寻找将它们完全嵌入第一个bash脚本的方法.理想情况下,我希望有一个看起来像这样的文件:
################################
# AWK scripts #
################################
read -d '' scriptVariable <<'EOF'
'
{my block commands;}
'
EOF
################################
# End of AWK Scripts #
################################
awk $scriptVariable ${inputfile} # This line obviously doesn't work
Run Code Online (Sandbox Code Playgroud)
而不是传统的:
awk '{
my script commands
' ${intputfile}
Run Code Online (Sandbox Code Playgroud)
当然,我可以将它们写入文件,但重点不是.有什么建议 ?
编辑:虽然dogbane的答案工作正常,但下一个问题是,使用<<'HERE'标签,不会读取换行符.我不能取消引用它,否则,他试图解释awk脚本然后遇到$符号在(并且有).并且没有换行符,我无法在awk脚本中发表任何评论(在删除换行符时没有评论一半脚本...).任何人 ?
<< 'EOF'
BEGIN{#Hello
print $1
}
EOF # Is read as BEGIN{#Hello print $1} by awk; ie BEGIN{
<< EOF
BEGIN{#Hello
print $1
}
EOF #Is read correctly by awk but Bash tried to express $1 and fails
Run Code Online (Sandbox Code Playgroud)
dog*_*ane 11
删除awk脚本周围的单引号,并将脚本变量括在双引号中.这对我有用:
################################
# AWK scripts #
################################
read -d '' scriptVariable << 'EOF'
BEGIN {
print "start"
}
{
print $0
}
END{
print "hello"
}
EOF
################################
# End of AWK Scripts #
################################
awk "$scriptVariable" ${inputfile}
Run Code Online (Sandbox Code Playgroud)