在 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_1而不是两个变量。任何帮助将不胜感激

答案1

bash 的read命令可以将一行拆分为一个字段数组:

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

相关内容