基于双列映射文件批量替换文件名的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"
使用说明
- 将上述脚本保存为
rename_fastq.sh - 赋予执行权限:
chmod +x rename_fastq.sh - 切换到目标文件所在目录,执行脚本:
./rename_fastq.sh
关键细节说明
IFS=$'\t':强制以制表符拆分映射文件的列,避免空格干扰匹配- 内置空行/注释行过滤逻辑,兼容带注释的映射文件
- 加入文件存在检查,避免因缺失文件导致的报错
mv -v会打印每一次重命名的操作记录,方便验证结果
内容的提问来源于stack exchange,提问作者Erfanesi
相关产品推荐
相关产品推荐

