Linux bash sort-g表示x.xxe+;Ubuntu 14.04LTS中的x格式数字
尝试使用sort-g对Ubuntu14.04LTS中的一些数据进行排序(GNU coreutils 8.21),但没有按照我的预期进行排序:Linux bash sort-g表示x.xxe+;Ubuntu 14.04LTS中的x格式数字,linux,bash,shell,sorting,Linux,Bash,Shell,Sorting,尝试使用sort-g对Ubuntu14.04LTS中的一些数据进行排序(GNU coreutils 8.21),但没有按照我的预期进行排序: printf "1\n6.7\n9\n6.9\n8\n1e4\n7\n1e+3\n2\n4\n45\n1e-2\n0.2e+3\n1.1e2\n1.2e+2" | sort -g 返回 0.2e+3 1e-2 1 1.1e2 1.2e+2 2 4 6.7 6.9 7 8 9 45 1e+3 1e4 似乎适用于x、x.x和xex格式,但不适用于x.xex
printf "1\n6.7\n9\n6.9\n8\n1e4\n7\n1e+3\n2\n4\n45\n1e-2\n0.2e+3\n1.1e2\n1.2e+2" | sort -g
返回
0.2e+3
1e-2
1
1.1e2
1.2e+2
2
4
6.7
6.9
7
8
9
45
1e+3
1e4
似乎适用于
x、x.x
和xex
格式,但不适用于x.xex
数字。非常感谢您的帮助。我有完全相同的问题和相同的操作系统:Ubuntu 14.04 LTS。我的解决办法是
sudo gedit /etc/default/locale
并添加/替换此行
LC_ALL="en_US.UTF-8"
可能你不在美国,一些当地的环境把事情搞砸了。找到此解决方案的提示。如果这不起作用,一个可能的解决方法是,如果所有条目都包含一个E(或E或d或其他)
这使用E
(-tE
)作为列分隔符,首先按第二列(-k2g
)排序,即指数,然后按第一列(-k1g
)排序,即指数之前的内容。这似乎对我有用。我的数据是这样的
0.13000000E-03 6 0.37947329E-11 0.53072241E-11
0.13000000E-03 5 0.39614807E-11 0.51917483E-11
0.15511087E-03 6 0.35497942E-11 0.50973016E-11
0.16372814E-03 7 0.34271161E-11 0.49932135E-11
在
排序(GNU coreutils)8.21上运行良好。请将echo与-e
一起使用。不带-e
的echo不会解释换行符。更好地使用printf
:printf“1\n6.7\n9\n6.9\n8\n1e4\n7\n1e+3\n2\n4\n45\n1e-2\n0.2e+3\n1.1e2\n1.2e+2”| sort-g
我怀疑这是您运行的命令,echo
会打印文字\n
coreutils。使用sort(GNU>8.13
对我有效8.15
和busybox sort v1.18.5
。我运行了您在问题说明中显示的确切命令(复制/粘贴),但没有得到您的结果。我得到了正确的结果。如果您运行了不同的程序并看到意外结果,请编辑您的问题并显示您实际运行的程序和实际结果。您可以将区域设置传递给sort命令,如:printf…|LC_ALL=C排序-g@JonatanÖström谢谢你!这就解决了问题!正如你说的,我不在美国。
0.13000000E-03 6 0.37947329E-11 0.53072241E-11
0.13000000E-03 5 0.39614807E-11 0.51917483E-11
0.15511087E-03 6 0.35497942E-11 0.50973016E-11
0.16372814E-03 7 0.34271161E-11 0.49932135E-11