Bioinformatics snakemake中的未知输出
我正在snakemake中实现一个非常简单的管道,希望用一个内聚的snakemake文件替换一系列恼人的bash脚本 我在编写一个将文件分割成更小的部分(使用GNU分割)的规则时遇到了问题,然后导致第二个规则,其中输出连接在一起 我不知道在concat步骤中为输入编写什么,因为我不知道如何定义符合模式的所有文件Bioinformatics snakemake中的未知输出,bioinformatics,snakemake,Bioinformatics,Snakemake,我正在snakemake中实现一个非常简单的管道,希望用一个内聚的snakemake文件替换一系列恼人的bash脚本 我在编写一个将文件分割成更小的部分(使用GNU分割)的规则时遇到了问题,然后导致第二个规则,其中输出连接在一起 我不知道在concat步骤中为输入编写什么,因为我不知道如何定义符合模式的所有文件bam\u files/test*。我试过使用glob,但这显然不起作用(似乎它实际上跳过了包含glob的split)。有没有更好的办法让我这么做 # test snakemake pip
bam\u files/test*
。我试过使用glob,但这显然不起作用(似乎它实际上跳过了包含glob的split)。有没有更好的办法让我这么做
# test snakemake pipeline
import glob
SAMPLE_IDS = ["test"]
rule all:
input:
expand("bam_files/{FASTQ}.out", FASTQ=SAMPLE_IDS)
rule split:
input:
expand("{FASTQ}.txt", FASTQ=SAMPLE_IDS)
output:
"bam_files/{FASTQ}."
shell:
"cat {input} | split -l 1000 -d - {output}."
rule concat:
input:
split_files = glob.glob("bam_files/{FASTQ}.*")
output:
"bam_files/{FASTQ}.out"
shell:
"cat {input} > {output}"
我认为这应该奏效:
SAMPLE_IDS = ["test"]
rule all:
input:
expand("bam_files/{FASTQ}.out", FASTQ=SAMPLE_IDS)
rule split:
input:
"{FASTQ}.txt"
output:
dynamic("bam_files/{FASTQ}.{PART}")
params:
length=1000
shell:
"cat {input} | split -l {params.length} -d - bam_files/{FASTQ}."
rule concat:
input:
split_files = dynamic("bam_files/{FASTQ}.{PART}")
output:
"bam_files/{FASTQ}.out"
shell:
"cat {input} > {output}"
看起来
split
规则应该一次获取一个文件{FASTQ}.txt
,并生成{FASTQ}.1、{FASTQ}.2、…
或类似的内容。因为您不知道它将提前生成多少文件,所以您需要使用dynamic()
进行split.output
和concat.input
您研究过dynamic()
吗?