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

如何用R或Bash基于TXT映射表批量修改指定文件名?

文件批量重命名解决方案

不管用Bash还是R,第一步一定要先备份文件,避免操作失误导致数据丢失。下面分别给出两种工具的实现方法:

Bash 实现

  1. 先备份目标文件:
cp -r ./你的文件目录 ./你的文件目录_backup
  1. 执行以下脚本完成重命名(把mapping.txt换成你的映射文件名):
# 建立COMP_ID到CHEM_ID的映射关联数组
declare -A chem_map
while read -r chem comp; do
    if [[ $chem != "CHEM_ID" ]]; then
        chem_map["$comp"]="$chem"
    fi
done < mapping.txt

# 遍历并处理每个目标文件
for file in BIB.metmss_*.txt.gz; do
    # 提取文件名中的metmss_xxxx部分
    comp_id=$(echo "$file" | grep -o 'metmss_[0-9]*')
    # 获取对应的CHEM_ID
    chem_id=${chem_map["$comp_id"]}
    
    if [[ -n $chem_id ]]; then
        # 构造新文件名:替换metmss为C,插入对应的CHEM_ID
        new_name=$(echo "$file" | sed "s/metmss_\([0-9]*\)/${chem_id}.C\1/")
        # 先打印预览重命名结果,确认无误后去掉echo执行实际重命名
        echo mv "$file" "$new_name"
        # mv "$file" "$new_name"
    else
        echo "警告:文件$file中的$comp_id未在映射表中找到对应CHEM_ID"
    fi
done

注意:先运行带echo的命令,确认输出的重命名逻辑正确后,再注释掉echo,执行实际的mv命令。

R 实现

  1. 先备份目标文件:
# 创建备份目录
dir.create("file_backup", showWarnings = FALSE)
# 复制所有目标文件到备份目录
file.copy(list.files(pattern = "BIB.metmss_*.txt.gz"), "file_backup")
  1. 执行以下代码完成重命名(需要先安装stringr包,若未安装可运行install.packages("stringr")):
library(stringr)

# 读取映射文件
map_table <- read.table("mapping.txt", header = TRUE, stringsAsFactors = FALSE)
# 转换为命名向量,方便快速查找
chem_mapping <- setNames(map_table$CHEM_ID, map_table$COMP_ID)

# 获取所有需要重命名的文件
target_files <- list.files(pattern = "BIB.metmss_*.txt.gz")

# 逐个处理文件
for (file in target_files) {
    # 提取文件名中的metmss_xxxx部分
    comp_id <- str_extract(file, "metmss_[0-9]+")
    # 查找对应的CHEM_ID
    chem_id <- chem_mapping[comp_id]
    
    if (!is.na(chem_id)) {
        # 构造新文件名
        new_name <- str_replace(file, "metmss_([0-9]+)", paste0(chem_id, ".C\\1"))
        # 先打印预览结果,确认无误后启用file.rename
        cat("重命名:", file, "->", new_name, "\n")
        # file.rename(file, new_name)
    } else {
        message("警告:文件", file, "中的", comp_id, "未在映射表中找到对应CHEM_ID")
    }
}

注意:先运行带cat的代码确认重命名逻辑正确,再注释掉cat,启用file.rename执行实际重命名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:08:13