[英]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.