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

使用Unix sort对含科学计数法的两列数据排序的问题

关于GNU sort多列排序(含科学计数法)的问题

测试数据

test文件内容:

A       2e-12
A       3e-14
A       1e-15
A       1.2e-13
B       1e-13
B       1e-14
C       4e-12
C       3e-12

预期排序结果

先按第一列字符串排序,再按第二列科学计数法数值升序排序:

A       1e-15
A       3e-14
A       1.2e-13
A       2e-12
B       1e-14
B       1e-13
C       3e-12
C       4e-12

尝试过程及问题

  • 单独对第二列按数值排序可正常工作,命令:sort -g -k2 test,输出:
sort -g -k2 test
A       1e-15
B       1e-14
A       3e-14
B       1e-13
A       1.2e-13
A       2e-12
C       3e-12
C       4e-12
  • 尝试多列排序时,以下命令均未得到预期结果:

    sort -k1,1 -g  test
    sort -k1,1 -g -k1,2  test
    sort -k1,1 -g -k2,1  test
    

    错误输出:

    A       1.2e-13
    A       1e-15
    A       2e-12
    A       3e-14
    B       1e-13
    B       1e-14
    C       3e-12
    C       4e-12
    

    另一组测试命令:

    sort -g -k2 -k1  test
    sort -g -k2 -k1,1  test
    sort -g -k2,2 -k1,1  test
    sort -k1,1 -g -k2,2 test
    sort -k1,1 -g -k2,2  test
    

    错误输出:

    A       1e-15
    B       1e-14
    A       3e-14
    B       1e-13
    A       1.2e-13
    A       2e-12
    C       3e-12
    C       4e-12
    
  • 已尝试设置LANG=C和LC_ALL=C,问题未解决。当前环境:Red Hat,GNU coreutils 8.22版本。

解决方案

正确的排序命令为:

sort -k1,1 -k2,2g test

命令解释

  • -k1,1:指定第一列为第一排序键,仅对第一列进行字符串排序。
  • -k2,2g:指定第二列为第二排序键,后缀g表示对该列使用数值排序(支持科学计数法),且仅作用于第二列。

正确输出

执行上述命令后,得到预期结果:

A       1e-15
A       3e-14
A       1.2e-13
A       2e-12
B       1e-14
B       1e-13
C       3e-12
C       4e-12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:10:35