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

Unix环境下拆分最后一列并保留前三位数字的技术需求

解决Unix环境下文本列拆分替换的问题

刚好我经常处理这类结构化文本数据,给你几个实用的Unix工具方案,轻松搞定这个需求:

方案1:用awk实现(推荐,灵活通用)

awk是处理文本列的利器,能直接定位最后一列并完成修改:

awk '{ $NF = substr($NF, 1, 3); print }' 你的输入文件名 > 输出文件名
  • 细节说明:
    • $NF 代表当前行的最后一列(NF是Number of Fields的缩写,自动识别列数)
    • substr($NF, 1, 3) 从最后一列的第1个字符开始截取3个字符(也就是你要的前三位数字)
    • 把截取后的结果重新赋值给$NF,再用print输出整行,就完成了原列的替换

方案2:用sed实现(适合行级正则替换)

如果习惯用sed做文本匹配替换,也可以通过定位行尾的6位数字来完成:

sed -E 's/([0-9]{3})([0-9]{3})$/\1/' 你的输入文件名 > 输出文件名
  • 细节说明:
    • -E 启用扩展正则表达式,不用给括号加转义符,写法更简洁
    • 正则([0-9]{3})([0-9]{3})$ 精准匹配行尾的6位数字,把前三位捕获到分组\1里
    • 用\1替换整个6位数字,相当于只保留前三位内容

方案3:用cut+paste组合实现(适合简单列场景)

如果更习惯用基础文本工具组合,也可以拆分后再拼接:

# 统计第一行的列数,计算前n-1列的范围
col_count=$(head -n1 你的输入文件名 | wc -w)
# 提取除最后一列外的所有内容到临时文件
cut -d' ' -f1-$((col_count-1)) 你的输入文件名 > temp1.txt
# 提取最后一列的前三位到临时文件
cut -d' ' -f$col_count 你的输入文件名 | cut -c1-3 > temp2.txt
# 拼接两个临时文件得到最终结果
paste -d' ' temp1.txt temp2.txt > 输出文件名
# 清理临时文件
rm temp1.txt temp2.txt
  • 细节说明:
    • 先用wc -w统计第一行的列数,避免手动数列的麻烦
    • 第一个cut提取前n-1列,第二个cut提取最后一列并截取前三位
    • 最后用paste把两部分按空格拼接成完整行

额外注意

如果你的数据列分隔符不是空格(比如制表符\t),需要调整对应参数:

  • awk默认支持空格和制表符作为分隔符,无需修改
  • sed不受分隔符影响,无需调整
  • cut和paste需要把-d' '改成-d$'\t'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:52:25