各行が次の新しい顧客情報であるファイルがあります。
Pop corn, [email protected], 50, 200
awk/gawk script
現在aを使用して各列を変数に割り当て、その変数をsed
テンプレートにリンクできることを確認します。 bashスクリプトでawk / gawkとsedを実行します。これを行うには、どのような良い実装に従う必要がありますか?grep
awk / gawk、sed、bashスクリプトを密接に使用する方法を学ぶか、まだperl
学んでいないので使用しないようにします。
ベストアンサー1
私の考えでは、次のようにする方が良いと思います。
while IFS=, read -r name email x y _ignored_; do
email=${email# } x=${x# } y=${y# }
sendmail -oem -oi -t << EOF
To: $name <$email>
Subject: Whatever
x=$x y=$y
EOF
done < file.csv
とにかく各行で少なくとも1つのコマンドを実行するので、シェルを使用して行を変数として読み込みます。そして、この記事ではsed
テンプレート拡張ではなくシェル変数拡張を使用します。
awk
or(シェルを実行してコマンドラインを解析する)をsystem()
使用してコマンドを実行できますが、ここではあまり役に立ちません。getline()
置くこれらの変数の環境変数とそれを設定するシェルコードを構築します。したがって、かなり複雑になり、効率が低下する可能性があります。それは次のとおりです。
CODE='sendmail -oem -oi -t << EOF
to: $name <$email>
Subject: Whatever
x=$x y=$y
EOF' awk -F ', *' -v q="'" '
function shquote(s) {
gsub(q, q "\\" q q, s)
return q s q
}
{system("name="shquote($1)" email="shquote($2)" x="shquote($3) \
" y="shquote($4)"\n"ENVIRON["CODE"])}' < file.csv