groovy 路径上的nextflow正则表达式

5lwkijsr  于 2023-04-29  发布在  其他
关注(0)|答案(1)|浏览(128)

下面的代码适用于字符串:

Channel
.of('test1.fastq', 'test2.fastq', 'test1.bam', 'test2.bam')
.filter( ~/.*bam|.*1.fastq/ )
.view()

但不是路径。有没有一种方法可以让path工作?例如:

Channel
.fromPath( params.inputs )
.filter( ~/.*bam|.*1.fastq/ )
.view()

谢谢!

yftpprvb

yftpprvb1#

filter操作符还允许您指定一个闭包,这将允许您使用Groovy的 find 操作符,例如:

params.inputs = '*.{bam,fastq}'

workflow {

    Channel
        .fromPath( params.inputs )
        .filter { it.name =~ /(\.bam|1\.fastq)$/ }
        .view()
}

另一种方法是使用find()方法,该方法返回列表中的第一个值,如果不存在这样的元素,则返回null。注意,根据Groovy Truth,非空字符串被强制为true:

params.inputs = '*.{bam,fastq}'

workflow {

    Channel
        .fromPath( params.inputs )
        .filter { file ->
            ['.bam', '1.fastq'].find { file.name.endsWith(it) }
        }
        .view()
}

相关问题