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

Linux sort命令多列排序问题:如何实现指定字段数值排序

自定义规则排序文本数据

问题描述

原始数据如下:

foo-a12a11
foo-a12a2
foo-a12b12
foo-a12b21
foo-a13a10
foo-a13a1
foo-a13a9
IIII122344      # 表示我希望考虑字段的顺序(I=忽略)

需要按以下规则排序:

  • 先按foo-a后的两位数字排序(如12、13,按数值顺序)
  • 再按数字后的单个字母排序(如a、b,按字典序)
  • 最后按末尾的数字排序(按数值顺序,如2排在11前,9排在10前)

注:所有数据的foo-a部分完全相同,排序时可忽略。

尝试使用命令 sort --key=1.1db,2.8n 时,报错 sort: options '-dn' are incompatible;改用字典序排序末尾数字时,会出现10排在9前的字典序问题,不符合需求。

期望的排序结果:

foo-a12a2
foo-a12a11
foo-a12b12
foo-a12b21
foo-a13a1
foo-a13a9
foo-a13a10

解决方法

问题出在你将d(字典序)和n(数值序)作为全局参数同时指定,这两个参数无法全局共存,必须为每个排序键单独配置对应的排序规则。

针对需求,正确的sort命令如下:

sort -k6,7n -k8,8d -k9,n input.txt

参数说明

  • -k6,7n:对第6到7位的字符执行数值排序,对应数据中的12/13部分,确保数字按数值大小排列。
  • -k8,8d:对第8位的字符执行字典序排序,对应数据中的a/b部分,确保字母按字典顺序排列。
  • -k9,n:从第9位开始到行尾的内容执行数值排序,解决末尾数字的字典序问题,让10排在9之后。

执行该命令后,即可得到你期望的排序结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:57:06