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)
这让我有两个问题:
问题在于,在某些国家/地区,本地设置可以通过使用,小数分隔符而不是.系统级别来解决这个问题.通过键入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 在终端中写入更短,但将其放在语言环境文件中可能不是更好,因为它可能会改变其他一些系统范围的行为,例如时间格式.
这是一个巧妙的伎俩:
$ 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命令的所有版本.