提供配对文件列表作为Snakemake的输入

时间:2019-07-08 14:21:17

标签: list input snakemake

我完成了一个简单的管道,在该管道中,我将几个文件合并(不是真的,但我们假装它们已合并)到一个文件名是两者的简单组合(file1_file2.output)并执行一些操作的管道中。操作。如果我手动提供文件1和文件2的文件名,则管道可以完美地工作,但是我真正要做的是这样的:

假装我有5个文件 A B C D E < / strong>。我想为这些对运行管道: A-D B-D C-E ,这就是Snakefile

rule all:
    input:
        expand("output/{file1}_{file2}.output")

rule Paste:
    input:
        F1="{file1}",
        F2="{file2}"
    output:
        out="output/{file1}_{file2}.output"
    shell:
        "paste {input.F1} {input.F2} > {output.out}"

这样做的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您必须在rule all中定义目标文件的真实名称。然后使用通配符获取输入文件。看起来像这样:

rule all:
    input:
        expand("output/{combination}.output", combination=["A_D","B_D","C_E"])

rule Paste:
    input:
        F1="{file1}",
        F2="{file2}"
    output:
        out="output/{file1}_{file2}.output"
    shell:
        "paste {input.F1} {input.F2} > {output.out}"

请注意,如果输入文件(A,B,C,D,E)也包含“ _”,则使用不正确的分隔符(例如“ _”)可能会打乱通配符的确定。我将使用您确定不会在文件名中使用的名称(例如:“ __”,“ _-_”或任何适当的名称)