簡體   English   中英

在 Shell 中格式化 Snakemake 輸入文件

[英]Format Snakemake Input Files in the Shell

我正在使用snakemake管道來運行具有來自不同讀取組的多個輸入 bam 文件的 GATK MarkDuplicate命令。

rule mark_duplicates:
    input:
        get_dedup_input
    output:
        bam=temp("bams/{patient}.{sample_type}.markdups.bam"),
        md5=temp("bams/{patient}.{sample_type}.markdups.bam.md5"),
        metrics="qc/gatk/{patient}_{sample_type}_dup_metrics.txt"
    conda:
        "../envs/gatk.yml"
    shell:
        """
        gatk MarkDuplicates -I {input} -O {output.bam} -M {output.metrics} \
            --CREATE_MD5_FILE true --ASSUME_SORT_ORDER "queryname"
        """

get_dedup_input返回輸入 bam 文件的列表。 MarkDuplicates要求使用-I標志指定每個輸入文件。 如果我只有一個 bam 文件,我可以簡單地寫-I {input} ,但這會失敗,因為它指定-I file1.bam file2.bam它需要是-I file1.bam -I file2.bam 格式化輸入以便將每個輸入文件指定為-I [input file]的最佳方法是什么?

下面是兩個場景,以闡明如果我手動運行命令,輸入、輸出和 shell 命令會是什么樣子。 為簡潔起見,我省略了一些非必要的MarkDuplicate標志:

一讀組

Inputs: patient101.normal.rg1.bam
Output: patient101.normal.markdups.bam
Shell: 
gatk MarkDuplicates -I patient101.normal.rg1.bam \
-O patient101.normal.markdups.bam \
-M metrics.txt

兩個閱讀組

Inputs: patient101.normal.rg1.bam, patient101.normal.rg2.bam
Output: patient101.normal.markdups.bam
Shell: 
gatk MarkDuplicates -I patient101.normal.rg1.bam \
-I patient101.normal.rg2.bam \
-O patient101.normal.markdups.bam \
-M metrics.txt

感謝您更新您的答案。

所以可能最好的辦法是讓一個參數成為我們需要的字符串,像這樣:

rule mark_duplicates:
    input:
        get_dedup_input
    output:
        bam=temp("bams/{patient}.{sample_type}.markdups.bam"),
        md5=temp("bams/{patient}.{sample_type}.markdups.bam.md5"),
        metrics="qc/gatk/{patient}_{sample_type}_dup_metrics.txt"
    conda:
        "../envs/gatk.yml"
    params:
        input=lambda wildcards, input: " -I ".join(input)
    shell:
        """
        gatk MarkDuplicates -I {params.input} -O {output.bam} -M {output.metrics} \
            --CREATE_MD5_FILE true --ASSUME_SORT_ORDER "queryname"
        """

如果我們的輸入是單個 bam,則params.input將只是patient101.normal.rg1.bam並且-I正常添加在前面。

如果我們有兩個輸入 bams,我們的 lambda 函數將-I放在它們之間,並且 shell 命令在前面添加-I

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM