也许这个问题已经得到了回答,但我无法提出正确的查询来找到它
我有一个大文件需要分析。为了快速完成这项工作,我首先将大文件拆分为多个小文件,并对每个小文件分别进行并行分析。对于这一点,我有这样的想法:
rule all:
input:
'bigfile.{wildcards.partnum}.out',
rule split_big_file:
input: 'bigfile'
output: touch('splitting_file.done')
shell: 'split {input}'
rule process_small_files:
input:
small_file = 'bigfile.{wildcards.partnum}',
done = 'splitting_file.done'
output: 'bigfile.{wildcards.partnum}.out'
shell:
'some_command {input.small_file} > {output}'
规则split_big_file
使用split
命令并生成文件名为bigfile.001, bigfile.002, etc
的文件。我在规则split_big_file
中使用touch('splitting_file.done')
来确保下一个规则process_small_files
在完成之前不会启动。当我试图运行这个程序时,我得到一个Missing input files for rule process_small_files
错误。我怎样才能避开这件事
规则“process\u small\u files”认为它需要一个文件,如bigfile.001,但据snakemake所知,工作流中没有规则可以生成该文件。虽然split_big_文件将生成该文件,但在“output”部分中,它只声明它将生成文件“Spliting_file.done”,因此snakemake认为工作流无法生成bigfile.001,并假设它应该已经存在
由于split命令根据输入文件的大小生成不同数量的文件,因此需要使用snakemake的动态文件功能:https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#dynamic-files
相关问题 更多 >
编程相关推荐