Snakemake: расширение только подмножества подстановочных знаков - PullRequest
1 голос
/ 08 мая 2020

Я не могу найти решение этой, вероятно, простой проблемы:

У меня есть этот 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, чтобы оно объединяло файлы с одинаковым именем образца?

Желаемый результат:

  • конкатенированный / sample1.txt

  • конкатенированный / sample2.txt

Любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ

У меня очень похожий дополнительный вопрос, поэтому я не думаю, что нужно снова открывать новый вопрос:

Что, если бы мой ожидаемый результат быть следующим:

  • 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}/.;"

Вы можете определить проблему?

Заранее большое спасибо

1 Ответ

1 голос
/ 08 мая 2020
rule concatenate:
  input:
    expand("data/{{sample}}_{pair}.txt", pair=pairs)
  output:
    "concatenated/{sample}.txt"
  shell:
    "cat {input} > {output};"

Ответьте на q в комментарии:

from snakemake.io import expand # automatically imported in Snakemake 

expand("data/{{sample}}_{pair}.txt", pair="A B C".split())
# ['data/{sample}_A.txt', 'data/{sample}_B.txt', 'data/{sample}_C.txt']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...