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

Bash脚本遍历含数字命名文件目录,处理成对文件的方法

Bash脚本处理成对fq.gz文件的解决方案

先解决变量拼接的语法问题

你写的P$i_1.fq.gz会被Bash错误解析:它会把$i_1当成一个完整的变量名,而不是$i加上_1。正确的写法是用**大括号{}**包裹变量名,明确分隔变量和后续字符,即P${i}_1.fq.gz。

方法1:硬编码数字范围循环(适合已知固定编号的场景)

如果确定文件编号是1到10,可以直接循环数字,每次生成一对文件路径:

for i in {1..10}; do
    # 定义成对的两个文件路径
    read1="P${i}_1.fq.gz"
    read2="P${i}_2.fq.gz"
    
    # 这里替换为你的实际处理逻辑,比如质控、比对等
    echo "正在处理:$read1 和 $read2"
    # 示例操作:用fastqc做质控
    # fastqc "$read1" "$read2" -o ./qc_output/
done

方法2:自动识别目录内的所有成对文件(更灵活健壮)

如果文件编号不连续,或者不想硬编码范围,可以自动遍历目录里的所有P*_1.fq.gz文件,再推导对应的配对文件:

# 遍历所有前缀为P*的_1.fq.gz文件
for read1 in P*_1.fq.gz; do
    # 从read1文件名中提取前缀(比如把P1_1.fq.gz变成P1)
    prefix="${read1%_1.fq.gz}"
    # 生成对应的配对文件路径
    read2="${prefix}_2.fq.gz"
    
    # 先检查配对文件是否存在,避免报错
    if [ -f "$read2" ]; then
        echo "正在处理:$read1 和 $read2"
        # 这里写你的实际处理命令
    else
        echo "警告:$read1 的配对文件 $read2 不存在,跳过"
    fi
done

这种方法不需要提前知道编号范围,还能自动跳过缺失配对的文件,容错性更强。

内容的提问来源于stack exchange,提问作者DYLAN NICO AMBROSI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 23:22:13