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
。