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

如何将配对fastq文件识别逻辑适配到For Loop批量处理

处理成对fastq文件的for循环适配问题

问题背景

我想把一个已解决的测序数据分析方案适配到for循环中,批量处理文件夹内的成对fastq文件,让每对文件独立处理并生成对应命名的输出。

示例输入文件

WT1_0min-SRR9929263_1.fastq
WT1_0min-SRR9929263_2.fastq
WT1_20min-SRR9929265_1.fastq
WT1_20min-SRR9929265_2.fastq
WT3_20min-SRR12062597_1.fastq
WT3_20min-SRR12062597_2.fastq

配对文件识别命令

可用以下命令识别每对fastq文件:

find . -name '*_1.fastq' -exec basename {} '_1.fastq' \; | xargs -n1 -I{} echo {}_1.fastq {}_2.fastq

处理需求

  • 禁止批量传入所有文件(如下形式):
-1 WT1_0min-SRR9929263_1.fastq,WT1_20min-SRR9929265_1.fastq,WT3_20min-SRR12062597_1.fastq
-2 WT1_0min-SRR9929263_2.fastq,WT1_20min-SRR9929265_2.fastq,WT3_20min-SRR12062597_2.fastq
  • 要求通过for循环依次处理每对文件:
Iteration #1
-1 WT1_0min-SRR9929263_1.fastq
-2 WT1_0min-SRR9929263_2.fastq

Iteration #2
-1 WT1_20min-SRR9929265_1.fastq
-2 WT1_20min-SRR9929265_2.fastq

Iteration #3
-1 WT3_20min-SRR12062597_1.fastq
-2 WT3_20min-SRR12062597_2.fastq

尝试的错误代码

我编写了以下for循环但无法正常运行,推测需要将xargs输出的配对文件名保存为变量供循环调用:

find . -name '*_1.fastq' -exec basename {} '_1.fastq' \; | xargs -n1 -I{} echo {}_1.fastq {}_2.fastq

for file in *.fastq
do
  bowtie2 -p 8 -x /path/genome \
  1- {}_1.fastq \
  2- {}_2.fastq \
  "../path/${file%%.fastq}_UnMappedReads.fastq.gz" \
  2> "../path/${file%%.fastq}_Bowtie2_log.txt" | samtools view -@ 7 -b | samtools sort -@ 7 -m 5G -o "../path/${file%%.fastq}_Mapped.bam"
done

预期输出文件

WT1_0min-SRR9929263_UnMappedReads.fastq.gz
WT1_20min-SRR9929265_UnMappedReads.fastq.gz
WT3_20min-SRR12062597_UnMappedReads.fastq.gz
WT1_0min-SRR9929263_Bowtie2_log.txt
WT1_20min-SRR9929265_Bowtie2_log.txt
WT3_20min-SRR12062597_Bowtie2_log.txt
WT1_0min-SRR9929263_Mapped.bam
WT1_20min-SRR9929265_Mapped.bam
WT3_20min-SRR12062597_Mapped.bam

解决方案

直接遍历所有*_1.fastq文件,提取每对文件的共同前缀,即可实现循环处理:

# 遍历所有_1.fastq文件
for read1 in ./*_1.fastq; do
    # 提取每对文件的共同前缀(去掉末尾的_1.fastq)
    prefix="${read1%_1.fastq}"
    # 对应_2.fastq文件的路径
    read2="${prefix}_2.fastq"
    # 获取输出文件的前缀(去掉路径,仅保留文件名)
    out_prefix=$(basename "$prefix")
    
    # 执行bowtie2比对及后续samtools处理流程
    bowtie2 -p 8 -x /path/genome \
        -1 "$read1" \
        -2 "$read2" \
        --un-conc-gz "../path/${out_prefix}_UnMappedReads.fastq.gz" \
        2> "../path/${out_prefix}_Bowtie2_log.txt" | 
        samtools view -@ 7 -b | 
        samtools sort -@ 7 -m 5G -o "../path/${out_prefix}_Mapped.bam"
done

关键修正说明

  1. 简化循环逻辑:直接遍历*_1.fastq文件,避免复杂的find+xargs管道,更易维护
  2. 参数修正:原命令中bowtie2的1-/2-应为-1/-2,同时添加--un-conc-gz参数才能生成指定的未映射reads压缩文件
  3. 输出命名:通过basename获取纯文件名作为输出前缀,确保输出文件命名符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:50:27