使用'sort -g'bash命令对带有指数的浮点数进行排序

Ale*_*lex 6 sorting bash command-line

我有一个浮点数与指数的文件,我想对它们进行排序.AFAIK'sort -g'是我需要的.但看起来好像是浮子扔掉了所有的指数.所以输出看起来像这样(这不是我想要的):

$ cat file.txt | sort -g
8.387280091e-05
8.391373668e-05
8.461754562e-07
8.547354437e-05
8.831553093e-06
8.936111118e-05
8.959458896e-07
Run Code Online (Sandbox Code Playgroud)

这让我有两个问题:

  1. 为什么'sort -g'不起作用,因为我期望它起作用?
  2. 我如何使用bash命令对文件进行排序?

Jon*_*röm 6

问题在于,在某些国家/地区,本地设置可以通过使用,小数分隔符而不是.系统级别来解决这个问题.通过键入locale终端进行检查.应该有一个条目

LC_NUMERIC=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

如果该值是其他任何值,请通过编辑区域设置文件将其更改为上述值

sudo gedit /etc/default/locale
Run Code Online (Sandbox Code Playgroud)

而已.您也可以暂时使用此值

LC_ALL=C sort -g file.dat
Run Code Online (Sandbox Code Playgroud)

LC_ALL=C 在终端中写入更短,但将其放在语言环境文件中可能不是更好,因为它可能会改变其他一些系统范围的行为,例如时间格式.


Dav*_* W. 6

这是一个巧妙的伎俩:

$ sort -te -k2,2n -k1,1n test.txt 
8.461754562e-07
8.959458896e-07
8.831553093e-06
8.387280091e-05
8.391373668e-05
8.547354437e-05
8.936111118e-05
Run Code Online (Sandbox Code Playgroud)

-te将您的号码分为两个区域由e分隔出从指数的尾数.该-k2,2说的指数先进行排序,然后-k1,1说,你的下一个尾数排序.

适用于该sort命令的所有版本.