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

如何用Bash对首列空格不均的空格分隔列表按首数值排序

解决方案

问题根因

原sort -nr命令无法满足需求的核心原因是:作为首列的车型名称包含数量不定的空格,无法通过sort的-k参数固定指定排序字段的位置。

实现思路

通过临时插入排序键的方式实现需求,全程不会修改原有行的空格分隔格式:

  1. 提取每行首字母后出现的第一个数值作为临时排序键,放到行首
  2. 按临时排序键做数值正序排序
  3. 删除临时插入的排序键,还原原始行格式

完整命令

sed -E 's/^[^0-9]*([0-9]+\.?[0-9]*)/\1|&/' 输入文件路径 | sort -n | sed 's/^[^|]*|//'

命令拆解

  • 第一个sed命令:用正则匹配行首所有非数字字符,捕获后续第一个带可选小数点的数值,将数值作为排序键放到行首,用|作为临时分隔符(该分隔符不会出现在你的输入内容中)
  • sort -n命令:按第一列的临时排序键做数值正序排序
  • 第二个sed命令:删除行首到|分隔符的所有内容,还原原始行的完整格式,原有空格完全保留

可选:直接修改原文件

如果需要直接修改原文件,可执行如下命令:

sed -E 's/^[^0-9]*([0-9]+\.?[0-9]*)/\1|&/' 输入文件路径 | sort -n | sed 's/^[^|]*|//' > 临时文件 && mv 临时文件 输入文件路径

如果你的系统安装了moreutils工具包,也可以用sponge简化操作:

sed -E 's/^[^0-9]*([0-9]+\.?[0-9]*)/\1|&/' 输入文件路径 | sort -n | sed 's/^[^|]*|//' | sponge 输入文件路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:48:02