path
限定符(以前是 file
限定符)可用于将单个(文件)值 或 多个(文件)值的集合暂存到进程执行目录中。文档中多个输入文件一节底部的注释还提到:
在 文件输入 一节介绍的常规文件输入结构也同样适用于多个文件的集合。
这意味着,您可以使用一个脚本变量,例如:
:
input:
tuple val(sample_id), path(my_files)
在这种情况下,变量将保存文件列表(保留原始文件名)。您可以直接使用它来引用列表中的所有文件,或者使用方括号(切片)表示法访问特定(文件)元素(如果需要)。
这是您大多数时候想要的语法。但是,如果您需要可预测的文件名或者需要处理具有相同文件名的文件,则可能需要不同的方法:
或者,您可以指定一个目标文件名,例如:
input:
tuple val(sample_id), path('my_file')
如果进程接收到单个文件,则该文件将使用目标文件名进行分段。但是,当进程接收到一组文件时,文件名将附加一个表示其在列表中序数位置的数字后缀。例如:
process test {
tag { sample_id }
debug true
stageInMode 'rellink'
input:
tuple val(sample_id), path('fastq')
"""
echo "${sample_id}:"
ls -g --time-style=+"" fastq*
"""
}
workflow {
readgroups = Channel.fromFilePairs( '*_{1,2}.fastq' )
test( readgroups )
}
结果:
$ touch {foo,bar,baz}_{1,2}.fastq
$ nextflow run .
N E X T F L O W ~ version 22.04.4
Launching `./main.nf` [scruffy_caravaggio] DSL2 - revision: 87a80d6d50
executor > local (3)
[65/66f860] process > test (bar) [100%] 3 of 3 ✔
baz:
lrwxrwxrwx 1 users 20 fastq1 -> ../../../baz_1.fastq
lrwxrwxrwx 1 users 20 fastq2 -> ../../../baz_2.fastq
foo:
lrwxrwxrwx 1 users 20 fastq1 -> ../../../foo_1.fastq
lrwxrwxrwx 1 users 20 fastq2 -> ../../../foo_2.fastq
bar:
lrwxrwxrwx 1 users 20 fastq1 -> ../../../bar_1.fastq
lrwxrwxrwx 1 users 20 fastq2 -> ../../../bar_2.fastq
请注意,可以使用通配符
*
和
?
来控制分阶段文件的名称。请参见上面的链接,了解表格显示如何根据输入集合的基数替换通配符的详细信息。
path(my_files)
之后,如何对它们进行迭代?在这种情况下:[file_A, file_B, ... , file_N]
按照相同的顺序进行迭代。 - Death Metalcollect
。 - Steve