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

Bash新手求助:如何批量对文件夹内fq文件执行BBMap reformat.sh命令

批量执行BBMap reformat.sh处理双端测序文件的正确Bash写法

原命令的问题

你原来的循环会遍历目标文件夹下的所有文件,导致$samples被赋值为每个完整文件名(比如XY1.1.fq),拼接后会生成错误的输入路径(比如XY1.1.fq.1.fq),完全不符合需求。

正确写法(通用版)

直接遍历所有.1.fq结尾的文件,提取样本前缀后匹配对应的.2.fq文件,自动生成符合要求的输出文件名:

# 先切换到目标目录,简化路径书写
cd ~/work/RADseq/Pool1_process_radtags/

# 遍历所有以.1.fq结尾的文件
for read1 in *.1.fq; do
    # 提取样本名(去掉.1.fq后缀)
    sample=$(basename "$read1" .1.fq)
    # 构造对应的read2文件路径
    read2="${sample}.2.fq"
    # 构造输出文件名,匹配示例格式
    out1="${sample}.1-reform.fq"
    out2="${sample}.2-reform.fq"
    
    # 执行BBMap的reformat.sh命令
    /usr/local/bioinfo/src/BBMap/bbmap_38.95/reformat.sh in="$read1" in2="$read2" out="$out1" out2="$out2" addslash=true
done

固定样本名单的写法(适合已知所有样本名的场景)

如果已经明确知道所有样本前缀,也可以直接遍历样本名列表:

cd ~/work/RADseq/Pool1_process_radtags/
for sample in XY1 XY2 XY15 XY18; do
    /usr/local/bioinfo/src/BBMap/bbmap_38.95/reformat.sh in="${sample}.1.fq" in2="${sample}.2.fq" out="${sample}.1-reform.fq" out2="${sample}.2-reform.fq" addslash=true
done

关键说明

  • 用basename "$read1" .1.fq可以安全地提取样本前缀,即使文件名包含特殊字符也能处理
  • 给变量加双引号(比如in="$read1")可以避免文件名含空格或特殊字符时出现错误

内容的提问来源于stack exchange,提问作者Loïs V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:03:34