awkを使用して変数を作成、エクスポート、またはインポートしますか?

awkを使用して変数を作成、エクスポート、またはインポートしますか?

各行が次の新しい顧客情報であるファイルがあります。

Pop corn, [email protected], 50, 200

awk/gawk script現在aを使用して各列を変数に割り当て、その変数をsedテンプレートにリンクできることを確認します。 bashスクリプトでawk / gawkとsedを実行します。これを行うには、どのような良い実装に従う必要がありますか?grepawk / 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テンプレート拡張ではなくシェル変数拡張を使用します。

awkor(シェルを実行してコマンドラインを解析する)を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

おすすめ記事