我有一个带有指数浮点数的文件,我想对它们进行排序。 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
这让我有两个问题:
答案 0 :(得分:6)
问题在于,在某些国家/地区,本地设置可能会在系统级别使用,
作为小数点分隔符而非.
来解决此问题。在终端中输入locale
进行检查。应该有一个条目
LC_NUMERIC=en_US.UTF-8
如果值是其他任何值,请通过编辑区域设置文件
将其更改为上述值sudo gedit /etc/default/locale
就是这样。您也可以通过执行
暂时使用此值LC_ALL=C sort -g file.dat
LC_ALL=C
在终端中写入时间较短,但将其放在语言环境文件中可能不是优选的,因为它可能会改变一些其他系统范围的行为,例如时间格式。
答案 1 :(得分: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
-te
将您的号码划分为两个字段,e
将尾数与指数分开。 -k2,2
表示首先按指数排序,然后-k1,1
表示按照你的尾数进行排序。
适用于sort
命令的所有版本。
答案 2 :(得分:4)
你的方法绝对正确
cat file.txt | sort -g
如果上述代码无效,请尝试此
sed 's/\./0000000000000/g' file.txt | sort -g | sed 's/0000000000000/\./g'
转换'。'到'0000000000000',排序并再次替换为'。'。我选择“0000000000000”进行替换,以避免数字与输入不匹配。 您可以自己操纵数字。