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

Unix环境下删除|分隔文件第20列最后一个字符的方法

如何删除分隔文件指定列的最后一个字符

针对你需要处理的|分隔文件——删除第20列最后一个字符的需求,这里提供两种实用的Unix命令方案,完美适配变长记录的场景:

方法一:用awk(推荐,逻辑清晰好维护)

awk本来就是处理分隔字段的一把好手,这个需求用它来做最直观:

awk -F'|' -v OFS='|' '{ $20 = substr($20, 1, length($20)-1); print }' input.txt > output.txt

命令说明:

  • -F'|':告诉awk,输入的字段是用|分隔的
  • -v OFS='|':确保输出时依旧用|分隔,保持原文件格式不变
  • $20 = substr($20, 1, length($20)-1):直接定位到第20列,用substr函数截掉最后一个字符——从第1个字符开始截取,长度比原字段少1即可
  • print:将修改后的整行输出到output.txt中

如果担心第20列可能为空(长度为0),可以加个判断避免报错:

awk -F'|' -v OFS='|' '{ if (length($20) > 0) $20 = substr($20, 1, length($20)-1); print }' input.txt > output.txt

方法二:用sed(适合快速文本替换)

如果你更习惯sed的正则玩法,也可以用这个方案:

sed -E 's/(([^|]*\|){19})([^|]+)(.)/\1\3/' input.txt > output.txt

正则逻辑说明:

  • -E:启用扩展正则表达式,让语法更简洁
  • 正则(([^|]*\|){19})([^|]+)(.)将行拆分为三部分:
    1. (([^|]*\|){19}):匹配前19个|分隔的完整字段(从行首到第19个|的所有内容)
    2. ([^|]+):匹配第20列的全部内容(除|以外的所有字符)
    3. (.):专门捕获第20列的最后一个字符
  • 替换为\1\3,即保留前19个字段的内容,加上去掉最后一个字符的第20列内容,正好实现需求

小技巧:原地修改文件

如果不想生成新文件,直接修改原文件的话,GNU awk和sed都支持原地编辑:

  • awk版本:awk -i inplace -F'|' -v OFS='|' '{ $20 = substr($20, 1, length($20)-1); print }' input.txt
  • sed版本:sed -i -E 's/(([^|]*\|){19})([^|]+)(.)/\1\3/' input.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:43:54