并行比较两个参数并发送到命令

并行比较两个参数并发送到命令

我正在尝试使用 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 subj_id 之前,应从$pathsbash 数组 $paths 中提取等于:

/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.

相关内容