我可以停止在Snakefile中并行执行的规则吗

问题描述

我试图将通过snakemake工作流程创建的文件串联起来作为最后一条规则。为了分隔和识别每个文件的内容,我首先在外壳中回显每个文件名作为分隔标签(请参见下面的代码)

rule cat:
    input:
        expand('Analysis/typing/{sample}_type.txt',sample=samples)        
    output:            
        'Analysis/typing/Sum_type.txt'        
    shell:            
        'echo {input} >> {output} && cat {input} >> {output}'

我一直在寻找这种格式的结果:

样本1的文件名

样本1的内容

样本1的文件名 2

样品2的含量

相反,我得到了以下格式:

样本1的文件名样本2的文件名...

样本1的内容 样品2的含量...

snakemake似乎先并行执行echo命令,然后再执行cat命令。我该怎么办才能得到我想要的格式?

谢谢

解决方法

与Snakemake问题相比,这看起来更像是外壳问题。

如果要替换文件名和内容,则可以在输入文件上使用循环,如下所示:

# Just an example:
samples = ["A","B","C"]


rule all:
    input:
        'Analysis/typing/Sum_type.txt'

rule cat:
    input:
        expand('Analysis/typing/{sample}_type.txt',sample=samples)
    output:
        'Analysis/typing/Sum_type.txt'
    shell:
        """
        for file in {input}
        do
            echo ${{file}} >> {output}
            cat ${{file}} >> {output}
        done
        """

(双花括号避免将预期的shell变量file解释为Snakemake / Python在计算传递给shell的字符串时应“插入”的东西。)

,

您获得的输出与bash的工作方式一致,而不是与snakemake一致。无论如何,我认为做蛇的方法是将文件名添加到每个文件的文件内容中的规则,以及连接输出的规则。例如。 (未检查错误):

rule cat:
    input:
        'Analysis/typing/{sample}_type.txt',output:
        temp('Analysis/typing/{sample}_type.txt.out'),shell:
        r"""
        echo {input} > {output}
        cat {input} >> {output}
        """
        
rule cat_all:
    input:
        expand('Analysis/typing/{sample}_type.txt.out',sample=samples)        
    output:            
        'Analysis/typing/Sum_type.txt'        
    shell:            
        r"""
        cat {input} > {output}
        """

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...