基于Bash与GNU工具按行长度插入逗号恢复CSV列
用Bash和GNU工具恢复CSV列的最优方法
核心思路
你的需求本质是将每行最后5个字符固定为第二列,前面的内容作为第一列,无需单独判断行长度,直接基于这个规则处理即可,以下是两种高效实现方式:
方法1:GNU Sed正则替换
这是最简洁的实现方式,利用正则表达式直接拆分每行:
sed -E 's/(.*)(.{5})/\1,\2/' input.csv > output.csv
- 说明:
-E启用扩展正则,(.*)匹配除最后5个字符外的所有内容,(.{5})匹配末尾5个字符;替换时在两部分之间插入逗号,一键完成拆分。
方法2:Awk按字符位置拆分
逻辑更直观,通过字符串截取实现:
awk '{print substr($0, 1, length($0)-5) "," substr($0, length($0)-4)}' input.csv > output.csv
- 说明:
substr($0,1,length($0)-5)提取开头到倒数第6个字符的部分(第一列),substr($0,length($0)-4)提取倒数第5个字符到结尾的部分(第二列),用逗号拼接后输出。
优势说明
这两种方法均依赖系统默认自带的GNU工具,无需额外安装软件;无需逐行判断行长度,直接贴合“第二列固定5字符”的核心需求,代码简洁且处理大文件时性能优异。
内容的提问来源于stack exchange,提问作者Hashim Aziz
相关产品推荐
相关产品推荐

