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

관련 정보