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

如何基于文件名向指定TXT文件添加列并修改原文件?

解决方案

这里有个精准匹配你需求的实现方案,结合你已有的查找逻辑,我们可以用find+awk组合来完成批量修改文件的操作,完美实现给每个目标文件添加name_file列的需求:

完整命令代码

SourceFile='/root/Document/Source/'
# 修正find路径并匹配目标文件,确保只处理符合规则的txt文件
find "$SourceFile" -type f -regextype posix-regex -iregex "^.*/ABCDEF_555_[0-9]{5}\.txt$" | while read -r target_file; do
  # 用awk处理文件内容,先写入临时文件再替换原文件,避免直接覆盖出错
  awk -v file_name="$(basename "$target_file")" '
    BEGIN {FS=OFS="|"}  # 设置输入输出分隔符为|
    NR == 1 {print $0, "name_file"}  # 表头行追加字段名
    NR > 1 {print $0, file_name}     # 数据行追加当前文件名
  ' "$target_file" > "$target_file.tmp" && mv "$target_file.tmp" "$target_file"
done

关键细节说明

  • 修正了你原find命令里的小问题:去掉了$SourceFile后面多余的.,同时加上-type f确保只处理文件(不会误匹配目录),用双引号包围变量避免路径含空格时出错
  • 使用basename "$target_file"提取纯文件名(不带路径),这样追加的就是你要的ABCDEF_555_12345.txt这类格式
  • 用临时文件$target_file.tmp过渡,只有当awk处理成功时才替换原文件,防止中途出错导致原文件损坏
  • FS=OFS="|"保证awk处理时保持原文件的|分隔符格式,不会出现乱码或分隔错误

之前你用awk没得到理想结果,大概率是没正确传递文件名变量,或者没区分表头行和数据行的逻辑,这个方案刚好补上了这些点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:13:49