【发布时间】:2019-02-15 14:49:57
【问题描述】:
我在弄清楚如何使输入指令仅选择以下规则中的所有 {samples} 文件时遇到问题。
rule MarkDup:
input:
expand("Outputs/MergeBamAlignment/{samples}_{lanes}_{flowcells}.merged.bam", zip,
samples=samples['sample'],
lanes=samples['lane'],
flowcells=samples['flowcell']),
output:
bam = "Outputs/MarkDuplicates/{samples}_markedDuplicates.bam",
metrics = "Outputs/MarkDuplicates/{samples}_markedDuplicates.metrics",
shell:
"gatk --java-options -Djava.io.tempdir=`pwd`/tmp \
MarkDuplicates \
$(echo ' {input}' | sed 's/ / --INPUT /g') \
-O {output.bam} \
--VALIDATION_STRINGENCY LENIENT \
--METRICS_FILE {output.metrics} \
--MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 200000 \
--CREATE_INDEX true \
--TMP_DIR Outputs/MarkDuplicates/tmp"
目前它将创建正确命名的输出文件,但它会根据所有通配符选择与模式匹配的所有文件。所以我可能已经成功了一半。我尝试在输入指令中将{samples} 更改为{{samples}},如下所示:
expand("Outputs/MergeBamAlignment/{{samples}}_{lanes}_{flowcells}.merged.bam", zip,
lanes=samples['lane'],
flowcells=samples['flowcell']),`
但这以某种方式打破了以前的规则。所以解决方案类似于
input:
"{sample}_*.bam"
但这显然行不通。
是否可以收集与 {sample}_*.bam 匹配的所有文件和函数并将其用作输入?如果是这样,该函数是否仍可与 shell 指令中的 $(echo ' {input}' etc...) 一起使用?
【问题讨论】: