将awk嵌入shell脚本中

Ber*_*ron 10 bash awk

我一直在使用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)