【问题标题】:GNU parallel environmental variables separated from input与输入分离的 GNU 并行环境变量
【发布时间】:2021-02-19 10:01:46
【问题描述】:

我有一个我认为应该很容易解决的问题,但由于某种原因我无法解决它.. 我在 Snakemake 中使用 GNU 并行来执行一些变体调用。

我的输入文件 (contigs.txt) 看起来像这样:

GL000207.1
GL000226.1
GL000229.1
GL000231.1
GL000210.1
GL000239.1
GL000235.1

最终执行的命令如下所示:

         "name=$(bash get_name.sh normal_recal.bam) \n"
         
         "cat {input.contigs} | "
         "env_parallel --env name --jobs {threads} "
         "'({input.GATK} Mutect2 -I {input.tumor} -I {input.normal} "
         "-R {input.reference} -normal $name "
         "--native-pair-hmm-threads 4 "
         "-L {{}} --germline-resource {input.gnomAD} "
         "-O {input.path}/{wildcards.sample_id}/{{}}.somatic.vcf "
         "--f1r2-tar-gz {input.path}/{wildcards.sample_id}/{{}}.f1r2.tar.gz) &> {log.err}.{{}}.err' \n"

如果我在交互式终端中执行此脚本,一切都会按预期工作。但是,当我尝试在snakemake 中执行它时,程序只是结束而没有错误。我想我已经用这个简单的例子找到了问题所在:

cat contigs | env_parallel --env name --jobs 4 'echo $name'

这会打印出类似这样的内容:

sample_tumor GL000207.1
sample_tumor GL000226.1
sample_tumor GL000229.1
sample_tumor GL000231.1

我认为问题在于,输入变量也被传递给$name 变量,这导致程序崩溃。 我想知道如何才能实现,只有实际的$name(即这里的sample_tumor)才能通过。所以上面例子的输出是

sample_tumor 
sample_tumor 
sample_tumor 
sample_tumor 

干杯!

【问题讨论】:

  • 要避免{{}},您可以使用-I ++,然后在GNU Parallel 中使用++ 而不是{}env_parallel --dryrun ... 的输出是什么?
  • 我目前无法访问集群以检查确切的输出。但我记得输出正是我所期望的。如果我复制了“dryrun commands”之一并手动执行它们,一切都会按预期进行。
  • 这也是您应该创建 MCVE stackoverflow.com/help/minimal-reproducible-example 的另一个原因
  • (gatk Mutect2 -I normal_recal.bam -R genome.fa -normal sample_buffy-coat11-01 --native-pair-hmm-threads 4 -L phiX174 --germline-resource af_only_processed_gnomad_with_head.vcf.gz -O phiX174.somatic.vcf --f1r2-tar-gz phiX174.f1r2.tar.gz) &> logs/Mutect2.phiX174.err 这是dryrun 输出的命令之一。其他的仅在 contig Mutect2 操作上有所不同。就像我说的,如果我在终端中复制此命令,它会按预期工作。
  • 您的命令不是 MCVE。你没有包含你正在使用的所有文件,所以我不能在我的电脑上运行那个确切的命令。

标签: parallel-processing snakemake gnu-parallel


【解决方案1】:

事实证明我对错误的猜测是错误的。我想我想念用过的env_parallel。 这段代码解决了我的问题。

         "name=$(bash get_name.sh normal_recal.bam) \n"
         "export name \n"
         "cat {input.contigs} | "
         "parallel --jobs {threads} "
         "'({input.GATK} Mutect2 -I {input.tumor} -I {input.normal} "
         "-R {input.reference} -normal $name "
         "--native-pair-hmm-threads 4 "
         "-L {{}} --germline-resource {input.gnomAD} "
         "-O {input.path}/{wildcards.sample_id}/{{}}.somatic.vcf "
         "--f1r2-tar-gz {input.path}/{wildcards.sample_id}/{{}}.f1r2.tar.gz) &> {log.err}.{{}}.err'"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 2021-09-24
    • 2021-06-18
    • 2014-04-09
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    相关资源
    最近更新 更多