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

批量合并两个同结构文件夹中的FASTQ文件求助

合并结构匹配的FASTQ文件BASH脚本实现

核心思路

遍历其中一个源文件夹(比如Folder_A)的样本目录结构,同步在目标文件夹Folder_C创建对应目录,然后对每个FASTQ.gz文件,将Folder_A和Folder_B中对应路径的文件合并输出到Folder_C的对应位置。

完整脚本

#!/bin/bash

# 定义源文件夹和目标文件夹路径,根据实际情况修改
SOURCE_A="./Folder_A"
SOURCE_B="./Folder_B"
DEST="./Folder_C"

# 遍历Folder_A下的所有样本子目录
for sample_dir in "$SOURCE_A"/*/; do
    # 获取样本目录的名称(比如从Folder_A/Sample_10_DNA/提取Sample_10_DNA)
    sample_name=$(basename "$sample_dir")
    
    # 在目标文件夹创建对应的样本目录,-p参数确保父目录不存在时也能创建,且不报错
    mkdir -p "$DEST/$sample_name"
    
    # 遍历当前样本目录下的所有FASTQ.gz文件
    for fastq_file in "$sample_dir"*.fastq.gz; do
        # 获取文件名(比如Sample_10_DNA_S7_L001_R1_001.fastq.gz)
        file_name=$(basename "$fastq_file")
        
        # 定义两个源文件和目标文件的完整路径
        file_a="$SOURCE_A/$sample_name/$file_name"
        file_b="$SOURCE_B/$sample_name/$file_name"
        file_dest="$DEST/$sample_name/$file_name"
        
        # 检查两个源文件是否都存在
        if [[ -f "$file_a" && -f "$file_b" ]]; then
            # 合并两个文件到目标路径,>会覆盖已存在的目标文件,若要追加用>>(但合并两个文件应该用>)
            cat "$file_a" "$file_b" > "$file_dest"
            echo "已合并: $file_dest"
        else
            # 若其中一个文件不存在,输出警告
            echo "警告: 缺少文件 - $file_a 或 $file_b,跳过该文件"
        fi
    done
done

echo "所有合并操作完成"

使用说明

  1. 将脚本保存为merge_fastq.sh
  2. 根据实际路径修改SOURCE_A、SOURCE_B、DEST的值(可以用绝对路径,比如/home/user/Folder_A)
  3. 赋予脚本执行权限:chmod +x merge_fastq.sh
  4. 运行脚本:./merge_fastq.sh

注意事项

  • 脚本假设Folder_A和Folder_B的目录结构完全一致,且样本目录是源文件夹的直接子目录
  • 合并.gz文件无需解压,cat命令可以直接处理gzip压缩文件
  • 如果Folder_C中已存在目标文件,脚本会直接覆盖,若需避免覆盖,可以在cat前添加判断:if [[ ! -f "$file_dest" ]]; then ... fi
  • 若样本目录有嵌套结构(比如Folder_A/Group1/Sample_10_DNA),可以把遍历方式改为find "$SOURCE_A" -type d -mindepth 1,再调整路径处理逻辑

内容的提问来源于stack exchange,提问作者Shi Ming Tan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:05:07