并行比较两个参数并发送到命令
parallel compare two arguments and send to command
我正在尝试 运行 recon-all 命令与 GNU 并行。它应该在 {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 "" | cut -d / -f 3)
recon-all -s $subj_id -i "" -sd /output
}
export -f doit
parallel doit ::: ${paths[@]}
另请参阅--plus
。它可能只是定义了一个替换字符串,您可以直接使用它而不是使用 cut
.
我正在尝试 运行 recon-all 命令与 GNU 并行。它应该在 {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 "" | cut -d / -f 3)
recon-all -s $subj_id -i "" -sd /output
}
export -f doit
parallel doit ::: ${paths[@]}
另请参阅--plus
。它可能只是定义了一个替换字符串,您可以直接使用它而不是使用 cut
.