我当前正在读取 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