파일 값을 반복하기 위해 awk를 얻을 수 없습니다

파일 값을 반복하기 위해 awk를 얻을 수 없습니다

안녕 얘들아

스크립트에 인수로 전달된 파일(또는 여러 파일)의 값을 반복 실행하려고 하는데 각 파일의 첫 번째 줄만 인식됩니다 ./myscript file1 file2 ....awk

#!/bin/bash

while [[ ${#} > 0 ]]
do
 for archivo in ${@}
 do
  read url filename <<<$(awk -F',' '{print $1, $2}' $archivo)
  curl -o $filename $url
 done
done

스크립트에 인수로 전달된 파일의 구조는 다음과 같습니다.

url1,filename1
url2,filename2
...

목표는 하나 이상의 매개변수를 사용하여 스크립트를 호출할 때마다 나열된 파일을 다운로드 awk하기 위해 각 파일에 포함된 URL과 파일 이름을 구문 분석(및 전달)해야 한다는 것입니다. curl작동시키는 방법에 대한 제안이 있으십니까?

미리 감사드리며 좋은 하루 보내세요!

답변1

url엉망인 것처럼 보이는 루핑 구조(각 파일에서 한 쌍의 - 만 읽음) 외에도 filename따옴표가 없는 명령 대체는 $(awk -F',' '{print $1, $2}' $archivo)기본적으로 토큰화되어 IFSawk 출력이 한 줄로 연결됩니다. 비교하다:

$ echo $(printf 'foo bar\nbaz bam\n')
foo bar baz bam

비교적

$ echo "$(printf 'foo bar\nbaz bam\n')"
foo bar
baz bam

그러나 이것은 실제로 awk의 쓸모없는 사용입니다. 쉘을 설정하고 파일을 직접 읽을 수 IFS있습니다 ,. 어쩌면 당신이 원하는 것은 :

for archivo in "$@"
do
  while IFS=, read -r url filename rest
  do 
    curl -o "$filename" "$url"
  done < "$archivo"
done

관련 정보