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

如何将fasta数组元素与对应分组的fastq数组元素逐一配对迭代?

问题描述

我有两个存储文件名的数组:

files_ref=( $(find . -name '*.fasta') )
files_fq=( $(find . -name '*.fastq') )

我知道如果要按索引配对迭代元素,可以这么写:

for i in "${!files_ref[@]}"; do
    printf "%s is in %s\n" "${files_ref[i]}" "${files_fq[i]}"
done

但实际我的数组结构是这样的:

file_ref=(
  DI1.fasta
  DI2.fasta
  WT1.fasta
)
files_fq=(
  DI1_P1.fastq
  DI1_P2.fastq
  DI1_P3.fastq
  DI2_P1.fastq
  DI2_P2.fastq
  DI2_P3.fastq
  WT1_P1.fastq
  WT1_P2.fastq
  WT1_P3.fastq
)

我需要将files_ref中的每个元素与files_fq中对应分组的所有元素逐一配对迭代,想要实现如下效果:

DI1.fasta DI1_P1.fastq
DI1.fasta DI1_P2.fastq
DI1.fasta DI1_P3.fastq
DI2.fasta DI2_P1.fastq
DI2.fasta DI2_P2.fastq
DI2.fasta DI2_P3.fastq
WT1.fasta WT1_P1.fastq
WT1.fasta WT1_P2.fastq
WT1.fasta WT1_P3.fastq

请问有实现方法吗?

实现方案

方法1:基于前缀匹配遍历

核心思路是提取files_ref中每个文件的前缀(比如DI1),然后在files_fq中筛选出以该前缀开头的文件,逐一配对输出:

for ref in "${file_ref[@]}"; do
    # 提取前缀,去掉.fasta后缀
    prefix="${ref%.fasta}"
    # 遍历fastq数组,匹配前缀
    for fq in "${files_fq[@]}"; do
        if [[ "$fq" == "${prefix}_"*".fastq" ]]; then
            printf "%s %s\n" "$ref" "$fq"
        fi
    done
done

方法2:利用固定数量分组迭代

如果每个fasta对应的fastq数量固定(比如都是3个),可以通过索引计算的方式配对:

# 每个ref对应的fq数量
fq_per_ref=3
for i in "${!file_ref[@]}"; do
    ref="${file_ref[i]}"
    # 计算当前ref对应的fq起始索引
    start_idx=$((i * fq_per_ref))
    # 遍历对应范围内的fq元素
    for ((j=start_idx; j<start_idx+fq_per_ref; j++)); do
        printf "%s %s\n" "$ref" "${files_fq[j]}"
    done
done

方法3:先将fastq按前缀分组到关联数组

先把files_fq按前缀归类,再遍历files_ref取出对应组的元素,这种方式更清晰,适合后续扩展:

declare -A fq_groups
# 构建fastq分组关联数组
for fq in "${files_fq[@]}"; do
    # 提取前缀(比如DI1_P1.fastq → DI1)
    prefix="${fq%%_*}"
    fq_groups["$prefix"]+="$fq "
done

# 遍历ref文件,输出配对
for ref in "${file_ref[@]}"; do
    prefix="${ref%.fasta}"
    # 拆分分组内的fq文件
    read -ra fq_list <<< "${fq_groups[$prefix]}"
    for fq in "${fq_list[@]}"; do
        printf "%s %s\n" "$ref" "$fq"
    done
done

内容的提问来源于stack exchange,提问作者Paolo Lorenzini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:13:22