안녕 얘들아
스크립트에 인수로 전달된 파일(또는 여러 파일)의 값을 반복 실행하려고 하는데 각 파일의 첫 번째 줄만 인식됩니다 ./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)
기본적으로 토큰화되어 IFS
awk 출력이 한 줄로 연결됩니다. 비교하다:
$ 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