【发布时间】: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