parallel比较两个参数并发送给命令



我正在尝试用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应该从$paths中提取为subj_one bash数组$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

似乎现在我有错误,因为命令只是悬空。

所以并行命令应该看起来像:

parallel --progress recon-all -s subj_one -i /input/subj_one/export/PAT1/2/2_MR/IM0101 -sd /output ::: ${paths[@]}

您的命令是:

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

相关内容

  • 没有找到相关文章

最新更新