如何解决输入文件中的snakemake通配符
我对snakemake非常陌生,我正在尝试为每个样本创建一个merged.fastq。以下是我的Snakefile。
configfile: "config.yaml"
print(config['samples'])
print(config['ss_files'])
print(config['pass_files'])
rule all:
input:
expand("{sample}/data/genome_assembly/medaka/medaka.fasta",sample=config["samples"]),expand("{pass_file}",pass_file=config["pass_files"]),expand("{ss_file}",ss_file=config["ss_files"])
rule merge_fastq:
input:
directory("{pass_file}")
output:
"{sample}/data/merged.fastq.gz"
wildcard_constraints:
id="*.fastq.gz"
shell:
"cat {input}/{id} > {output}"
其中,“样本”是样本名称的列表,
“ pass_files”是fastq_pass文件夹的目录路径的列表,其中包含小的fastq文件
我正在尝试将每个样本的小fastq文件合并为一个大的merged.fastq。
我得到以下内容,
无法从输出文件确定输入文件中的通配符: 'pass_file'
作为错误。
解决方法
input
部分中的每个通配符在output
部分中应具有一个对应的通配符(具有相同的名称)。 Snakemake就是这样工作的:当Snakemake尝试压缩DAG作业并发现它需要某个文件时,它将查看每个规则的output
部分,并检查该规则是否可以产生所需的文件。这就是Snakemake如何在output
部分中为通配符分配某些值的方式。其他部分中的每个通配符都应与output
中的通配符之一匹配,这就是input
获取具体文件名的方式。
现在让我们看看您的rule merge_fastq
:
rule merge_fastq:
input:
directory("{pass_file}")
output:
"{sample}/data/merged.fastq.gz"
wildcard_constraints:
id="*.fastq.gz"
shell:
"cat {input}/{id} > {output}"
唯一能获得其值的通配符是{sample}
。 {pass_file}
和{id}
悬空。
如我所见,您正在尝试合并设计时未知的文件。看看dynamic
文件checkpoint
,并在input
中使用函数。
您的Snakefile的其余部分很难理解。例如,我看不到如何指定与此模式匹配的文件:"{sample}/data/merged.fastq.gz"
。
更新:
可以说,我有一个 目录(/ home / other_computer / jobs / data / / *。fastq.gz) 这是我的输入和输出是 (/结果/合并/ /merged.fastq.gz)。我尝试的是 输入的第一个路径:{“ pass_files”}(这来自我的配置 文件)并输出:“结果/合并/{sample}/merged.fastq.gz”
首先,让我们简化一下任务,并将{pass_file}
替换为硬编码路径。您有2个自由度:<sample_name>
和/home/other_computer/jobs/data/<sample_name>/
文件夹中的未知文件。 <sample_name>
是通配符的很好候选者,因为该名称可以从目标文件中派生。未知数量的文件*.fastq.gz
甚至不需要任何Snakemake构造,因为可以使用shell命令来表示。
rule merge_fastq:
output:
"/result/merged/{sample_name}/merged.fastq.gz"
shell:
"cat /home/other_computer/jobs/data/{sample_name}/*.fastq.gz > {output}"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。