“sort -g”对于科学记数法中的数据不能按预期工作

“sort -g”对于科学记数法中的数据不能按预期工作

我正在尝试按降序对数据文件进行排序。数据文件由制表符分隔的三列给出;我想对第三列按降序排列(第三列以指数值的科学记数法给出):

cat eII_surf.txt | sort -gr -k3

不知何故,这在以前的机器上有效,但我的新机器似乎根本不起作用。

这是一个简单的例子:

cat test.txt:

6.7 2.3e-12
5.0 3.4e-18
4.5 5.6e-16
4.2 2.1e-15
4.0 2.9e-17
2.4 2.5e-15
1.0 1.0e-17
0.5 1.0e-18

cat test.txt | sort -gr -k2

4.5 5.6e-16
5.0 3.4e-18
6.7 2.3e-12
4.2 2.1e-15
4.0 2.9e-17
2.4 2.5e-15
1.0 1.0e-17
0.5 1.0e-18

这是以下的输出locale

LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC=de_DE.utf8
LC_TIME=de_DE.utf8
LC_COLLATE="en_US.utf8"
LC_MONETARY=de_DE.utf8
LC_MESSAGES="en_US.utf8"
LC_PAPER=de_DE.utf8
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT=de_DE.utf8
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

答案1

2.3e-12将被理解为2在小数基数字符所在的语言环境中,(就像在大多数非英语世界中一样,包括您的de_DE.utf8)需要写入数字2,3e-12

你可以这样做:

LC_ALL=C sort -grk2 < your-file

强制以英语风格解释数字。

在 C 语言环境中(唯一可以保证在任何系统上找到的语言环境),小数基数是.(方便您的输入)。

请注意sort与 无关bash,它是一个单独的命令。该-g选项是 的 GNU 实现的非标准扩展sort

相关内容