whileループ内で複数の変数を定義する

whileループ内で複数の変数を定義する

私は現在csvファイルを読み取り、各行を繰り返して、後で使用する特定の列の変数を定義しています。

私のCSVファイルが次のようになっているとしましょう。

Column1,Column2,Column3,Column4,Column5
String1,String2,String3,String4,String5
...
while IFS= read -r line
do
  VARIABLE_1=$(awk -F"," '{print $2}')
  VARIABLE_2=$(awk -F"," '{print $4}')
  curl -XPUT <url_1>/2
  curl -XPUT <url_2>/4
done

何らかの理由でVARIABLE_12つの変数だけを選択しません。どんな助けでも大変感謝します。

ベストアンサー1

bashreadコマンドは、1行をフィールド配列に分割できます。

while IFS=, read -r -a fields; do
  var_1=${fields[1]}     # bash arrays are indexed from zero
  var_2=${fields[3]}
  # ... use those variables
done < file.csv

それじゃない本物CSVパーサー:引用符付きフィールドのコンマを考慮しません。 bash バージョン 5.1 ではできます

BASH_LOADABLES_PATH=${BASH/bin/lib}
enable -f csv csv

while IFS= read -r line; do
  csv -a fields "$line"
  # ... use the fields array
done < file.csv

CSV ファイルのヘッダー行を無視するには:

{
    read headers
    while IFS= read -r line; do 
        # do stuff
    done
} < file.csv

おすすめ記事