python - Snakemake 将多个命令行集成在一个规则中

标签 python bash shell snakemake gatk

我的第一个命令行 "bcftools query -l {input.invcf} | head -n 1" 的输出打印了 vcf 文件的第一个个体的名称(即 IND1)。我想在 -sn IND1 选项的 selectvariants GATK 中使用该输出。如何在 snakemake 中集成第一条命令行以便在下一条中使用它的输出?

rule selectvar:
    input:
        invcf="{family}_my.vcf"
    params:
        ind= ???
        ref="ref.fasta"
    output:
        out="{family}.dn.vcf"
    shell:
        """
        bcftools query -l {input.invcf} | head -n 1 > {params.ind}
        gatk --java-options "-Xms2G -Xmx2g -XX:ParallelGCThreads=2" SelectVariants -R {params.ref} -V {input.invcf} -sn {params.ind} -O {output.out}
        """

最佳答案

有多种选择,但最简单的一种是将结果存储到临时 bash 变量中:

rule selectvar:
   ...
   shell:
        """
        myparam=$(bcftools query -l {input.invcf} | head -n 1)
        gatk -sn "$myparam" ...
        """

如@dariober 所述,如果修改pipefail 行为,可能会出现意外结果,请参阅the example in this answer .

关于python - Snakemake 将多个命令行集成在一个规则中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70985443/

相关文章:

regex - 在 TSV 的匹配之前/之后插入换行符

python - 使用 input() 列出的数字

python - 如何让 uvicorn 运行异步构建的应用程序?

python - 将重复行添加到 DataFrame

Bash 时间格式 HH :MM in 12 hour format AM/PM

linux - bash内置函数bash源代码

python - jupyter 笔记本中的 XGBoost 崩溃内核

linux - 使用 udev 规则操作内核设备名称

bash - 如何在 bash 中找到所有不以给定前缀开头的文件?

linux - bash 脚本中的“全局化”Bash 函数