BashでCSVファイルを操作する

BashでCSVファイルを操作する

ヘッダーを各行を変更する変数として使用するCSVファイルを持ちたいのですが、各行while read -rでForループを実行するなどの簡単な操作を実行したいと思います。ループ中、私は各項目が特定の変数になりたいと思います。たとえば、csrファイルを生成します。

CSVは次のとおりです。

server alias cn san environment
server1,srv1,srv1.domain.com,"dns:srv1.coolstuff.org,dns:srv1.morecoolstuff.org:,production
server2,srv2,srv2.domain.com,"dns:srv2.dev.coolstuff.org,dns:srv2.dev.morecoolstuff.org",development

ちょっと待っています...私は通り過ぎます。

keytool -gen たぶんジャグアイテムの各行を使用します。

誰にもアイデアがありますか?私は猫の皮をむく方法が8,000種類あることを知っています。

答え1

私は通常csvtoolbashスクリプトを使用してCSVファイルを処理します。

次のようにする必要があります。

csvtool namedcol server,alias,cn,san,environment input.csv \
| csvtool -u TAB drop 1 - \
| while IFS=$'\t' read -r server alias cn san environment; do
   echo "server: ${server}"
   echo "alias: ${alias}"
   echo "cn: ${cn}"
   echo "san: ${san}"
   echo "environment: ${environment}"
   # do something with it...
   keytool -genkey -alias "${alias}" -keyalg RSA -keysize 2048
done

最初の呼び出しでは、csvtool列の順序が固定されていない場合、CSVファイルの列を名前で出力します。

2番目の呼び出しはCSVヘッダーを削除し、,入力データにタブではなくカンマを含めることができる場合に備えて、いくつかの区切り文字を変更します(代わりに「\ t」を使用)。

次に、envvarをread使用してIFS呼び出し、read変数名に値を割り当てるために同じ区切り文字を使用します。

関連情報