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

如何使用for循环合并下划线前前缀匹配的多个fastq文件?

问题描述

目录下有多个fastq文件,需要把下划线前前缀完全匹配的成对文件合并。

输入文件:

SRR9200887_1.fastq
SRR9200887_2.fastq
SRR9200888_1.fastq
SRR9200888_2.fastq
SRR9200889_1.fastq
SRR9200889_2.fastq

预期输出:

SRR9200887.fastq
SRR9200888.fastq
SRR9200889.fastq

尝试的代码:

for l in $(ls *.fastq | cut -d_ -f1 | sort |uniq); do cat ${l}*.fastq
正确实现方案

原代码的问题是没把合并结果写入目标文件,而且用ls解析文件名容易在文件名含特殊字符时出错,下面是两种可行的修正方案:

方案一:安全的循环写法

# 先提取所有唯一前缀,再逐个合并
printf "%s\n" *.fastq | cut -d_ -f1 | sort -u | while read base; do
    cat "${base}_"*.fastq > "${base}.fastq"
done

方案二:更简洁的版本

for base in $(printf "%s\n" *.fastq | cut -d_ -f1 | sort -u); do
    cat "${base}_"*.fastq > "${base}.fastq"
done

核心修正说明:

  1. 增加> "${base}.fastq"重定向,将合并后的内容写入对应前缀的输出文件
  2. 用"${base}_"*.fastq精准匹配前缀对应的成对文件,避免误匹配其他类似命名的文件
  3. 用printf "%s\n" *.fastq替代ls,处理文件名更可靠,不会因为空格、特殊字符出问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:05:08