두 인수를 병렬로 비교하여 명령으로 보냅니다.

두 인수를 병렬로 비교하여 명령으로 보냅니다.

GNU를 사용하여 recon-all 명령을 병렬로 실행하려고 합니다. 다음과 같은 매개변수 가 있어야 합니다 {1}.

parallel --progress subj_id='echo {1} | cut -d / -f 3' && recon-all -s $subj_id -i {1} -sd /output ::: ${paths[@]}

recon-all로 이동하기 전에 다음 $paths과 같은 bash 배열 $paths에서 subj_id를 추출해야 합니다.

/input/subj_one/export/PAT1/2/2_MR/IM0101 /input/subj_two/export/PAT1/2/2_MR/IM0101 /input/subj_tree/export/PAT1/2/2_MR/IM0101 /input/subj_four/export/PAT1/2/2_MR/IM0101

이제 명령이 보류 중이므로 오류가 발생한 것 같습니다.

답변1

귀하의 명령은 다음과 같습니다

parallel --progress subj_id='echo {1} | cut -d / -f 3' &&
  recon-all -s $subj_id -i {1} -sd /output ::: ${paths[@]}

이것은 분명히 당신이 의미한 것이 아닙니다. 아마도 다음과 같은 의미일 것입니다.

parallel --progress "subj_id=\$(echo {1} | cut -d / -f 3) && recon-all -s \$subj_id -i {1} -sd /output" ::: ${paths[@]}

하지만 참조는 귀찮으므로 함수를 정의하고 사용하세요.

doit() {
  subj_id=$(echo "$1" | cut -d / -f 3)
  recon-all -s $subj_id -i "$1" -sd /output
}
export -f doit
parallel doit ::: ${paths[@]}

또한 살펴보십시오 --plus. 를 사용하는 대신 직접 사용할 수 있는 대체 문자열을 정의할 수도 있습니다 cut.

관련 정보