Snakemake如何基于元数据表批量生成规则的全部输出文件列表
获取Snakemake规则所有输出路径的实现方案
现有Snakefile中extractfeat规则定义如下:
rule extractfeat: input: '/path/to/file/{genome}.gbk' output: '{genome}_{locus_tag}_{gene}_{substrate}.fasta' shell: ''' extractfeat {input} {output} -value {wildcards.genome}_{wildcards.locus_tag} -type CDS -describe product,locus_tag '''
同时存在一份制表符/多空格分隔的通配符取值表,列依次为genome、locus_tag、gene、substrate,每行对应一组通配符组合,需要生成所有符合规则output格式的文件路径,每行一个。
方案1:命令行直接生成(适合快速导出路径列表)
假设通配符表文件名为wildcard_table.tsv,直接执行awk命令即可批量生成路径,结果写入output_file_list.txt:
# 自动跳过表头,兼容制表符、多空格分隔的输入格式 awk 'NR>1 {printf "%s_%s_%s_%s.fasta\n", $1,$2,$3,$4}' wildcard_table.tsv > output_file_list.txt
如果确认输入文件严格使用制表符分隔,可以加上分隔符参数提升解析准确性:
awk -F '\t' 'NR>1 {printf "%s_%s_%s_%s.fasta\n", $1,$2,$3,$4}' wildcard_table.tsv > output_file_list.txt
方案2:Snakemake流程内动态生成(适合流程开发场景)
如果需要在Snakefile中直接引用所有输出作为目标任务,不需要额外导出文件,可以直接在流程内读取表格生成路径列表:
import pandas as pd # 读取通配符表,sep="\s+"可同时兼容制表符、多空格分隔的格式 wildcard_tbl = pd.read_csv("wildcard_table.tsv", sep="\s+") # 按规则output格式批量拼接所有输出路径 target_outputs = [ f"{row.genome}_{row.locus_tag}_{row.gene}_{row.substrate}.fasta" for _, row in wildcard_tbl.iterrows() ] # 将路径列表传入rule all的input,即可触发所有对应任务的运行 rule all: input: target_outputs
生成的路径格式示例(对应示例表格前3行):
PalbDSM11370_02121_susC_pululan.fasta PalbDSM11370_02122_susD_pululan.fasta PalbDSM11370_01210_susC_arabinan.fasta
内容的提问来源于stack exchange,提问作者aetobatus-narinari
相关产品推荐
相关产品推荐

