xargs를 사용하여 파일의 명령을 병렬로 실행하는 단일 라이너

xargs를 사용하여 파일의 명령을 병렬로 실행하는 단일 라이너

다음과 같은 스크립트가 있습니다.

#!/bin/csh

command 1 \
   -f \"input1\" \
   -l input2 -other_swithes1

command 2 \
   -f \"input1\" \
   -m input2 \
   -l input3 -other_swithes1

command 3 \
   -f \"input1\" \
   -l input2 -other_swithes2

xargs그렇다면 이러한 명령을 병렬로 실행하는 방법에 대해 알아보세요 . 다양한 변형을 시도했지만 모두 실패했습니다. 나는 실제로 스크립트를 작성하고 싶지 않습니다. -d 스위치와 -c를 사용하는 것이 가능할 것이라고 생각하지만 확실하지는 않습니다.

문제를 더욱 단순화하고 확장하기 위해 내가 가진 것은

cat file | grep -v "#.*" | sed -z 's/[\]\n/ /g' | xargs -I {} -n1 -P10 sh -c '{}'

작업이 완료되는 동안 특별한 문제가 발생하여 \"삭제되고 있습니다. 그렇다면 이 문제를 해결할 단서는 없나요?

답변1

GNU Parallel을 사용하면 다음을 수행할 수 있습니다.

parallel -d '\n\n' < file.csh

공개: 저는 이 도구의 작성자입니다.

답변2

대답은 다음과 같습니다.

cat file | grep -v "#.*" | sed -z 's/[\]\n/ /g' | sed -z 's/\"/\\\\"/g' | xargs -I {} -n1 -P10 sh -c '{}'

감사해요

관련 정보