Я пытаюсь настроить рабочий процесс, в котором при получении файла FIRST
файл разделяется на $ k $ отдельных файлов , где k неизвестно , SECOND_1, SECOND_2,...,SECOND_k
для параллельной обработки.
Каждый файл SECOND_i
(i = 1 ... k) затем обрабатывается для получения дополнительных файлов i_n, то есть в конце процесса у нас будет 1_n файлов для SECOND_1
, 2_n для SECOND_2
и так далее, где, опять же, числа i_n неизвестны и различны.
На этом шаге создается набор файлов THIRD_ij
, где i = 1 ... k и j = 1 ... i_n.
Теперь я должен sh объединить (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. Я хотел бы понять это!