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

基于双列映射文件批量替换文件名的Bash脚本需求

批量重命名fastq.gz文件的Bash脚本方案

以下是完全匹配需求的Bash脚本,可实现按映射文件替换ID,同时统一替换读段标识:

#!/bin/bash

# 检查映射文件是否存在
if [ ! -f "rename.tsv" ]; then
    echo "错误:当前目录下未找到rename.tsv文件"
    exit 1
fi

# 遍历映射文件的每一行,按制表符拆分旧ID与新ID
while IFS=$'\t' read -r old_id new_id; do
    # 跳过空行或注释行(若映射文件有#开头的注释)
    [[ -z "$old_id" || "$old_id" =~ ^# ]] && continue

    # 分别处理_1和_2对应的文件
    for read_tag in 1 2; do
        src_file="${old_id}_${read_tag}.fastq.gz"
        # 替换读段标识为指定格式
        case $read_tag in
            1) new_tag="_S1_L001_R1_001" ;;
            2) new_tag="_S1_L001_R2_001" ;;
        esac
        dest_file="${new_id}${new_tag}.fastq.gz"

        # 检查源文件存在后执行重命名,-v参数显示操作过程
        if [ -f "$src_file" ]; then
            mv -v "$src_file" "$dest_file"
        else
            echo "警告:未找到文件 $src_file"
        fi
    done
done < "rename.tsv"

使用说明

  1. 将上述脚本保存为rename_fastq.sh
  2. 赋予执行权限:chmod +x rename_fastq.sh
  3. 切换到目标文件所在目录,执行脚本:./rename_fastq.sh

关键细节说明

  • IFS=$'\t':强制以制表符拆分映射文件的列,避免空格干扰匹配
  • 内置空行/注释行过滤逻辑,兼容带注释的映射文件
  • 加入文件存在检查,避免因缺失文件导致的报错
  • mv -v会打印每一次重命名的操作记录,方便验证结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:49:54