首页 > 解决方案 > 蛇制造。创建多个目标时如何从命令行传递目标

问题描述

在上一个问题的帮助下,此代码在两个目录中的每一个中创建目标(名为“practice_phased_reversed.vcf”的文件的副本。

dirs=['k_1','k2_10']
rule all:
        input:
                expand("{f}/practice_phased_reversed.vcf",f=dirs)
rule r1:
        input:
                "practice_phased_reversed.vcf"
        output:
                "{f}/{input}"
        shell:
               "cp {input} {output}"

但是,我想在snakemake 命令行上传递目标文件。
我尝试了这个(如下),使用命令“snakemake practice_phased_reversed.vcf”,但它给出了一个错误:“MissingRuleException:没有规则产生 practice_phased_reversed.vcf”

dirs=['k_1','k2_10']
rule all:
        input:
                expand("{f}/{{base}}_phased_reversed.vcf",f=dirs)
rule r1:
        input:
                "{base}_phased_reversed.vcf"
        output:
                "{f}/{input}"
        shell:
               "cp {input} {output}"

谢谢你的帮助

标签: snakemake

解决方案


我认为您应该在命令行上将目标文件名作为配置选项传递,并使用该选项在 Snakefile 中构造文件名:

target = config['target']

dirs = ['k_1','k2_10']

rule all:
    input:
        expand("{f}/%s" % target, f=dirs),

rule r1:
    input:
        target,
    output:
        "{f}/%s" % target,
    shell:
       "cp {input} {output}"

要执行为:

snakemake -C target=practice_phased_reversed.vcf

推荐阅读