GNU Parallel에서 작업 번호를 전달하는 방법은 무엇입니까?

GNU Parallel에서 작업 번호를 전달하는 방법은 무엇입니까?

다음과 같은 병렬 명령을 통해 스크립트에서 기본 스크립트로 변수를 전달합니다.

./script1 | parallel -u --jobs 3 "./script2 {}"

의 두 번째 매개변수로 작업 번호를 어떻게 전달합니까 ./script2?

그것은 마치

./script1 | parallel -u --jobs 3 "./script2 {} {}" ::: {1..3}

하지만 첫 번째는 {}에서 와야 합니다 ./script1.

저는 매개변수의 조합을 원하지 않습니다. 대신 실행 중인 작업은 다음과 같아야 합니다.

./script2 var1 1
./script2 var2 2
./script2 var3 3
./script2 var4 1
./script2 var5 2
./script2 var6 3
./script2 var7 1

./script2' writes to filesfile1.txt ,files2.txt , andfile3.txt where the number is{1..3}` 또는 작업 번호를 상상해 보세요 .

하나의 스크립트만 해당 파일에 쓰고 있는지 확인하고 싶습니다. 즉, 세 개의 병렬 작업이 세 개의 지정된 파일에 기록됩니다.

답변1

귀하는 직위 번호가 아닌 직위인 {%}을(를) 찾고 있을 가능성이 높습니다.코인 투입구숫자.

LC_ALL=C seq 10 -0.1 1 | shuf |
  parallel --lb 'echo Job {} grabs {%}; sleep {}; echo Job {} releases {%}'

번호가 해제되면 다음 작업에서 어떻게 번호를 획득하는지 참고하세요. 따라서 병렬로 실행되는 2개의 작업은 동일한 {%} 값을 가지지 않습니다.

이 내용은 GNU Parallel 2018(http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html또는https://doi.org/10.5281/zenodo.1146014).

답변2

제가 찾은 해결책은 --link태그를 지정하여 조합을 집계하는 것이었습니다.

parallel -u --jobs 3 --link ./script2 {1} {2} :::: <(./script1) ::: {1..3}

그런 다음 {1}스크립트에서 {2}일반 일치만 수행합니다.

관련 정보