我正在尝试设置一个工作流,在该工作流中,当给定一个文件FIRST
时,该文件被拆分为$k$separate files,其中k未知,SECOND_1, SECOND_2,...,SECOND_k
以进行并行处理
然后对每个文件SECOND_i
(i=1…k)进行处理以生成额外的i_n文件,也就是说,在该过程结束时,我们将为SECOND_1
创建1_n文件,为SECOND_2
创建2_n文件,依此类推,其中,数字i_n也是未知和不同的
此步骤生成一组文件THIRD_ij
,其中i=1…k和j=1…i\n
现在我希望合并(cat
)具有相同索引j的所有文件,以获得文件FOURTH_1, FOURTH_2,...,FOURTH_m
其中FOURTH_2
例如是存在的所有文件THIRD_i2
的串联
我曾尝试使用snakemake来实现这一点,但我遇到了一些奇怪的错误
我当前的代码如下所示
rule split1:
input: "FIRST"
output: "first.done"
shell:
"[splitting_function1] {input} ;"
"touch {output}"
checkpoint split2:
input: "SECOND_{i}"
output: "{i}/second.done"
shell:
"[splitting_function2] {input} ; # makes a subdirectory {i} with the output"
"touch {output}"
def aggregate(wildcards):
out = checkpoints.split2.get(**wildcards).output[0]
out = out.replace("second.out","")
exp = expand(
"{i}/THIRD_{{j}}",
i= glob_wildcards(os.path.join(out, "THIRD_{j}")).i,
j = glob_wildcards(os.path.join(out, "THIRD_{j}")).j
)
rule merge:
input: aggregate
output: "{j}/third.done"
shell:
"cat {input} > {j}/FOURTH ;"
"touch {output}"
我不断得到WorkflowError
s,并且缺少I的通配符值。我很想弄明白
目前没有回答
相关问题 更多 >
编程相关推荐