Luk*_*chs 7 sort locale numeric-data
我正在尝试按降序对数据文件进行排序。数据文件由由制表符分隔的三列给出;我想对第三列按降序对它们进行排序(第三列作为指数值的科学记数法给出):
cat eII_surf.txt | sort -gr -k3
Run Code Online (Sandbox Code Playgroud)
不知何故,这在以前的机器上有效,但我的新机器似乎根本不起作用。
这里有一个简单的例子:
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
Run Code Online (Sandbox Code Playgroud)
和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
Run Code Online (Sandbox Code Playgroud)
这是输出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=
Run Code Online (Sandbox Code Playgroud)
Sté*_*las 11
2.3e-12将被理解为2在十进制基数字符所在的区域设置中,(在大多数非英语世界中,包括您的de_DE.utf8),其中需要写入数字2,3e-12。
你可以这样做:
LC_ALL=C sort -grk2 < your-file
Run Code Online (Sandbox Code Playgroud)
强制以英文风格解释数字。
在 C 语言环境(您可以保证在任何系统上都能找到的唯一语言环境)中,十进制基数是.(方便您的输入)。
请注意,sort与 无关bash,它是一个单独的命令。该-g选项是 GNU 实现的非标准扩展sort。