You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nextflow技术问题:如何处理不同目录下文件的所有配对?

如何在Nextflow中生成文件的所有可能配对?

目录结构

|-- combine.nf
|-- first
|   |-- a.txt
|   |-- b.txt
|   `-- c.txt
|-- second
|   |-- A.txt
|   `-- B.txt

原Nextflow代码

#!/usr/bin/env nextflow
process sayHello {
  input:
  path first
  path second

  output:
    stdout

  script:
    """
    echo 'Hello couple (${first}, ${second})' 
    """
}

workflow {
    def files_first = Channel.fromPath("first/*.txt")
    def files_second = Channel.fromPath("second/*.txt")
    sayHello(files_first, files_second) | view { it }
  }

当前运行结果

Hello couple (a.txt, A.txt)
Hello couple (b.txt, B.txt)

当前代码仅生成两组配对(取文件数量较少的目录的文件数),我们需要生成所有可能的文件配对,实际场景中其中一个目录仅包含一个文件。

解决方案

Nextflow默认将两个通道直接传入进程时,会按位置配对(类似zip操作),仅保留到较短通道的长度。要生成笛卡尔积形式的全配对,需使用cross操作符。

修改后的代码如下:

#!/usr/bin/env nextflow
process sayHello {
  input:
  path first
  path second

  output:
    stdout

  script:
    """
    echo 'Hello couple (${first}, ${second})' 
    """
}

workflow {
    def files_first = Channel.fromPath("first/*.txt")
    def files_second = Channel.fromPath("second/*.txt")
    // 用cross生成所有元素的笛卡尔积配对
    files_first.cross(files_second) | sayHello | view { it }
}

预期运行结果

Hello couple (a.txt, A.txt)
Hello couple (a.txt, B.txt)
Hello couple (b.txt, A.txt)
Hello couple (b.txt, B.txt)
Hello couple (c.txt, A.txt)
Hello couple (c.txt, B.txt)

若其中一个目录仅含单个文件,比如second目录只有A.txt,cross会自动生成3×1=3组配对,完全适配实际场景。

内容的提问来源于stack exchange,提问作者Pierre Peterlongo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:17:22