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

如何用Bash批量为数百个文件末尾添加存储文件名的新列

可行实现方案

你原有的脚本存在两个待优化点:一是没有实现原地修改原文件,二是表头行末尾会被插入文件名而非要求的name列名,以下是两种可直接使用的修正实现:

方案1:GNU Awk 原地修改(推荐,Linux环境默认支持)

GNU Awk 4.1.0及以上版本支持内置的原地修改参数,执行效率最高:

for file in *.txt; do
  awk -i inplace 'BEGIN{OFS="\t"} NR==1{print $0, "name"} NR>1{print $0, FILENAME}' "$file"
done

参数说明:

  • -i inplace:开启原地修改功能,直接覆盖原文件
  • NR==1判断当前为表头行,末尾追加name列名,其余行追加当前文件名
  • 变量外层添加双引号,避免文件名含空格时执行异常

方案2:全平台兼容的临时文件中转方案

如果是macOS等没有自带GNU Awk的环境,用临时文件中转的方式兼容性最好:

for file in *.txt; do
  awk 'BEGIN{OFS="\t"} NR==1{print $0, "name"} NR>1{print $0, FILENAME}' "$file" > "$file.tmp" && mv "$file.tmp" "$file"
done

注意事项

  • 批量执行前建议先拿单个测试文件验证输出格式符合预期,避免原文件被误改
  • 单文件1000万行的场景下,两种方案的处理效率都足够,Awk本身为大文本处理做了专项优化,不会有明显性能瓶颈
  • 如果需要保留原文件备份,可以把方案2的mv命令改成cp "$file" "$file.bak" && mv "$file.tmp" "$file",自动给每个原文件生成带.bak后缀的备份

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 09:15:03