GNU 并行读取多个文件

GNU parallel read from several files

我正在尝试使用 GNU parallel 通过名为 vcf2maf 的生物信息学工具转换单个文件。

我的命令看起来像这样:

${parallel} --link "perl ${vcf2maf} --input-vcf  \
                                    --output-maf ${maf_dir}/.maf \
                                    --tumor-id  \
                                    --tmp-dir ${vcf_dir} \
                                    --vep-path ${vep_script} \
                                    --vep-data ${vep_data} \
                                    --ref-fasta ${fasta} \
                                    --filter-vcf ${filter_vcf}" :::: ${VCF_files} ${results} ${tumor_ids}

VCF_filesresultstumor_ids每行一个条目,一一对应。

当我尝试 运行 命令时,每个文件都出现以下错误:

ERROR: Both input-vcf and output-maf must be defined!

这让我很困惑,因为如果我手动 运行 命令,程序会按预期运行,所以我认为 input/outpit 路径没有错。为了证实这一点,我还 运行

${parallel} --link "cat " :::: ${VCF_files} ${results} ${tumor_ids}, 正确打印 VCF 文件的内容,其路径在 VCF_files.

中列出

我真的很困惑我做错了什么,如果有人能帮助我,我将不胜感激!

谢谢!

对于这么长的命令,我通常会定义一个函数:

doit() {
  ...
}
export -f doit

然后在单个输入上进行测试。

何时有效:

parallel --link doit :::: ${VCF_files} ${results} ${tumor_ids}

但是如果你想使用单个命令,它将看起来像:

${parallel} --link "perl ${vcf2maf} --input-vcf {1} \
                                --output-maf ${maf_dir}/{2}.maf \
                                --tumor-id {3} \
                                --tmp-dir ${vcf_dir} \
                                --vep-path ${vep_script} \
                                --vep-data ${vep_data} \
                                --ref-fasta ${fasta} \
                                --filter-vcf ${filter_vcf}" :::: ${VCF_files} ${results} ${tumor_ids}

GNU Parallel 的替换字符串是 {1}、{2} 和 {3} - 而不是 ${1}、${2} 和 ${3}。

--dryrun 当 GNU Parallel 没有按照您的预期去做时,它是您的朋友。