ヘッダーを各行を変更する変数として使用する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
私は通常csvtool
bashスクリプトを使用して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
変数名に値を割り当てるために同じ区切り文字を使用します。