【问题标题】:Unix sort with scientific notation and two columnsUnix 使用科学记数法和两列排序
【发布时间】:2023-02-03 22:47:40
【问题描述】:

我对用 unix 排序对两列进行排序的结果摸不着头脑。

这是一个名为 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

我想先按第 1 列排序,然后按第 2 列排序,以生成:

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
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

This stack question 解决了类似的问题,但似乎只有当我要求对两列进行排序时,我的测试才会崩溃。

This other example 看起来非常接近我想要的,但是当我单独给出 -k 时,它不会改变我的测试集的行为。

这些试验:

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。

【问题讨论】:

    标签: bash sorting unix scientific-notation exponent


    【解决方案1】:

    我在写堆栈问题时想通了,所以我想我会继续并用我的解决方案发布问题。

    我对 -kn,n 的含义感到困惑,实际上将 sort 与 --debug 标志一起使用帮助我找到了答案。

    This question 几乎一针见血:总是使用 -kX,X 来确保我一次只考虑一个字段,然后在数字字段中指定 g。

    sort -k1,1 -k2,2g test
    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
    

    耶!

    【讨论】:

      猜你喜欢
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多