我不知道如何使用Snakemake规则删除已变得无用的Snakemake输出文件。
具体而言,我有一个规则bwa_mem_sam
,可以创建一个名为{sample}.sam
的文件。
我有另一条规则bwa_mem_bam
,它创建一个名为{sample.bam}
的文件。
这两个文件是否包含不同格式的相同信息,我想删除第一个不能成功执行此操作。
非常感谢任何帮助。 本。
rule bwa_mem_map:
input:
sam="{sample}.sam",
bam="{sample}.bam"
shell:
"rm {input.sam}"
# Convert SAM to BAM.
rule bwa_mem_map_bam:
input:
rules.sam_to_bam.output
# Use bwa mem to map reads on a reference genome.
rule bwa_mem_map_sam:
input:
reference=reference_genome(),
index=reference_genome_index(),
fastq=lambda wildcards: config["units"][SAMPLE_TO_UNIT[wildcards.sample]],
output:
"mapping/{sample}.sam"
threads: 12
log:
"mapping/{sample}.log"
shell:
"{BWA} mem -t {threads} {input.reference} {input.fastq} > {output} 2> {log} "\
"|| (rc=$?; cat {log}; exit $rc;)"
rule sam_to_bam:
input:
"{prefix}.sam"
output:
"{prefix}.bam"
threads: 8
shell:
"{SAMTOOLS} view --threads {threads} -b {input} > {output}"
答案 0 :(得分:1)
您不需要删除sam文件的规则。只需将“bwa_mem_map_sam”规则中的输出sam文件标记为临时:
rule bwa_mem_map_sam:
input:
reference=reference_genome(),
index=reference_genome_index(),
fastq=lambda wildcards: config["units"][SAMPLE_TO_UNIT[wildcards.sample]],
output:
temp("mapping/{sample}.sam")
threads: 12
log:
"mapping/{sample}.log"
shell:
"{BWA} mem -t {threads} {input.reference} {input.fastq} > {output} 2> {log} "\
"|| (rc=$?; cat {log}; exit $rc;)"
一旦不再需要临时文件(即:在任何其他规则中不用作输入),它将被snakemake删除。
评论后编辑: 如果我理解正确,您的声明“如果用户要求使用sam ...”则表示将sam文件放入目标规则中。如果是这种情况,那么只要目标规则的输入包含sam文件,该文件就不会被删除(我猜)。如果将bam文件放入目标规则(而不是sam),那么它将被删除。
另一种方式是:
rule bwa_mem_map:
input:
sam="{sample}.sam",
bam="{sample}.bam"
output:
touch("{sample}_samErased.txt")
shell:
"rm {input.sam}"
并在目标规则中询问“{sample} _samErased.txt”。
答案 1 :(得分:1)
根据上面的评论,您想询问用户是否需要sam或bam输出。
您可以将其用作配置参数:
snakemake --config output_format=sam
然后你使用这种Snakefile:
samples = ['A','B']
rule all:
input:
expand('{sample}.mapped.{output_format}', sample=samples, output_format=config['output_format'])
rule bwa:
input: '{sample}.fastq'
output: temp('{sample}.mapped.sam')
shell:
"""touch {output}"""
rule sam_to_bam:
input: '{sample}.mapped.sam'
output: '{sample}.mapped.bam'
shell:
"""touch {output}"""