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

bash中sort命令按.分隔多列排序仅第一列生效问题排查

问题背景
  • 待排序的日期文本内容如下:
2023.12.14
2020.10.4
2020.10.1
2020.5.18
2023.14.1
2021.1.1
  • 期望升序排序结果如下:
2020.5.18
2020.10.1
2020.10.4
2021.1.1
2023.12.14
2023.14.1
  • 最初尝试使用的命令:
    sort -t "." -k1,1 -k2,1 -k3,1 sortingTest.txt
  • 执行异常:命令仅按第一列(年份段)完成排序,第二列、第三列的排序逻辑未生效,不符合预期。
错误原因

命令存在两处配置问题:

  1. -k排序键的范围写法错误
    sort的-k参数格式为-k 起始位置,结束位置,用于指定排序键覆盖的字段范围。你写的-k2,1、-k3,1中,结束字段序号小于起始字段序号,属于无效配置,sort会直接忽略这两个排序键,最终只生效第一个有效排序键-k1,1,也就是仅按第一列排序。
  2. 缺少数值排序配置
    即使修正了排序键范围,sort默认按字符串字典序排序,会出现10排在5前面的情况(逐字符比较时,字符1的ASCII码小于5),不符合日期数值大小的排序逻辑。
修正方案

使用以下命令即可得到预期结果:

sort -t "." -k1,1n -k2,2n -k3,3n sortingTest.txt

参数说明:

  • -t ".":指定.为字段分隔符
  • -k1,1n:第一个排序键为第1字段到第1字段,按数值(n参数)升序排序
  • -k2,2n:第二个排序键为第2字段到第2字段,按数值升序排序,仅在第一字段值相等时生效
  • -k3,3n:第三个排序键为第3字段到第3字段,按数值升序排序,仅在第一、第二字段值都相等时生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:48:28