xargs 및 csv의 입력을 사용하여 컬 명령을 병렬로 실행

xargs 및 csv의 입력을 사용하여 컬 명령을 병렬로 실행

일련번호와 이미지 URL을 포함한 여러 열이 포함된 CSV 파일이 있습니다. 파일의 줄이 450개가 넘습니다.

1,text1,text2,http://image_a.jpg
2,text1,text2,http://image_b.jpg
3,text1,text2,http://image_c.jpg
.
.
.

목표는 URL에서 이미지를 다운로드하는 것이며 파일명은 시퀀스입니다. 다음 스크립트를 사용하여 성공적으로 수행했습니다.

while IFS=, read col1 col2 col3 col4
do
   curl ${col4} > ${col1}.jpg
done < myfile.csv

이제 병렬을 사용하여 컬 명령을 실행하고 싶습니다 xargs -P. (프로세스 수를 제한하고 싶기 때문에 백그라운드에서만 사용하고 싶지 않습니다 .) and를 사용하는 예제를 &보았지만 xargs의 csv 파일 행에서 여러 필드를 사용하는 방법을 알 수 없습니다. 명령.-I-R

나는 gnu 병렬과 wget이 더 나은 옵션일 수 있다는 것을 알고 있지만 내 Unix 환경에서는 사용할 수 없습니다.

감사해요.

답변1

IF Scott 제안된 방법 중 하나를 사용하여 GNU Parallel을 얻을 수 있습니다https://oletange.wordpress.com/2018/03/28/excuses-for-not-installing-gnu-parallel/그러면 다음과 같이 작동할 수 있습니다.

parallel --colsep , 'curl {4} > {1}.jpg' :::: input.csv

답변2

curl제가 보기에는 명령을 작성한 다음 xargs에 전달 해야 하는 것 같습니다 .

awk -F, '{print "curl '\''" $4 "'\'' > '\''" $1".jpg'\''"}' < input.csv | xargs -P2 -I {} sh -c '{}'

&쉘 특수 문자(예: ) 가 있는 경우 URL과 일련 번호/파일 이름 주위에 작은따옴표를 넣었기 때문에 명령이 약간 보기 흉해 보입니다.

관련 정보