18

たとえば、値を置き換えることにより、「実行時」に調整されたさまざまなawkスクリプト(script1.awk、script2.awk)を使用するbashスクリプト(script.sh)を使用しています。最初の bash スクリプト内にそれらを完全に埋め込む方法を探していました。理想的には、次のようなファイルが必要です。

################################
# AWK scripts                  #
################################
read -d '' scriptVariable <<'EOF'
'
{my block commands;}
'
EOF
################################
# End of AWK Scripts           #
################################
awk $scriptVariable ${inputfile} # This line obviously doesn't work

従来の代わりに:

awk '{
my script commands
' ${intputfile}

もちろん、それらをファイルに書き込むこともできますが、要点はそうではありません。助言がありますか ?

編集: ドッグベインの回答は正常に機能しますが、次の問題は、<<'HERE' タグを使用すると、改行文字が読み取られないことです。内に(そしてあります)。また、改行がないため、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
4

3 に答える 3

17

awk スクリプトを囲む単一引用符を削除し、スクリプト変数を二重引用符で囲みます。これは私のために働く:

################################
# AWK scripts                  #
################################
read -d '' scriptVariable << 'EOF'
BEGIN {
    print "start"
}
{
    print $0
}
END{
    print "hello"
}
EOF
################################
# End of AWK Scripts           #
################################

awk "$scriptVariable" ${inputfile}
于 2013-02-22T09:12:17.500 に答える
2

awk スクリプトを一重引用符で囲むと、シェル内で扱いにくくなる場合があります。

echo dummy code | awk '/dummy/{print '$1' $2}' - another_file | while read LINE; do
    case $LINE in
        "$1 code")echo success;;
        *)echo $LINE;;
    esac
done

これにより、stdin、次に another_file から削除され、ダミーを含む行が出力され、最初のフィールドが bash スクリプトの最初の引数に置き換えられます。bash 変数 $1 は引用符で囲まれていない必要があることに注意してください。

于 2013-02-22T09:18:14.593 に答える
1

Here-Documentを使用して、bash スクリプト内に awk を含めることができます。

于 2013-02-22T08:54:19.743 に答える