Я не могу найти решение этой, вероятно, простой проблемы:
У меня есть этот snakefile, который сначала создает следующие файлы:
data / sample1_P1. txt
data / sample1_P2.txt
data / sample2_P1.txt
data / sample2_P2 .txt
На следующем этапе он просто объединяет файлы в один файл concatenated/concatenated.txt
.
Это минимальный воспроизводимый пример:
pairs = {"P1" : "P1", "P2" : "P2"}
samples = {
"sample1": "sample1",
"sample2": "sample2"
}
rule all:
input: "concatenated/concatenated.txt"
rule get_txt_files:
output:
"data/{sample}_{pair}.txt"
shell:
"""
echo 1 > {output}
"""
rule concatenate:
input:
expand("data/{sample}_{pair}.txt", sample=samples, \
pair=pairs)
output:
"concatenated/concatenated.txt"
shell:
"cat {input} > {output};"
Мой вопрос прост: как я могу изменить правило concatenate
, чтобы оно объединяло файлы с одинаковым именем образца?
Желаемый результат:
Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ
У меня очень похожий дополнительный вопрос, поэтому я не думаю, что нужно снова открывать новый вопрос:
Что, если бы мой ожидаемый результат быть следующим:
data / sample1 / sample1_P1
data / sample1 / sample1_P2
data / sample2 / sample2_P1
data / sample2 / sample2_P2
Чтобы было ясно: я хочу только создать новый каталог и переместить файлы в этот заказной каталог .
Казалось интуитивно понятным сделать это вот так:
pairs = {"P1" : "P1", "P2" : "P2"}
samples = {
"sample1": "sample1",
"sample2": "sample2"
}
rule all:
input: expand("data/{sample}/{sample}_{pair}.txt", sample=samples, pair = pairs)
rule get_txt_files:
output:
"data/{sample}_{pair}.txt"
shell:
"""
echo 1 > {output}
"""
rule reorganise:
input:
expand("data/{{sample}}_{pair}.txt", \
pair=pairs)
output:
"data/{sample}/{sample}_{pair}.txt"
shell:
"mv {input} data/{wildcards.sample}/.;"
Вы можете определить проблему?
Заранее большое спасибо