我有与指数浮动的文件,我想对它们进行排序。 据我所知“排序-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
这使我想到了两个问题:
- 为什么“排序-g”我期望它的工作不工作?
- 如何猫我整理我的使用bash命令文件?
这里有一个巧妙的方法:
$ 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
命令。
问题是,在一些国家,当地的设置可以乱用这个了,
因为小数点分隔符代替.
在系统级别。 通过键入检查locale
在终端。 应该有一个条目
LC_NUMERIC=en_US.UTF-8
如果该值是其他任何东西,通过编辑区域文件,将其更改为上述
sudo gedit /etc/default/locale
而已。 您也可以暂时做使用这个值
LC_ALL=C sort -g file.dat
LC_ALL=C
是在更短的终端写,但把它在区域设置文件可能不是优选的,因为它可能改变一些其他系统范围的行为,如也许时间格式。
你的方法是绝对正确
cat file.txt | sort -g
如果上面的代码不能正常工作,那就试试这个
sed 's/\./0000000000000/g' file.txt | sort -g | sed 's/0000000000000/\./g'
兑换 '。' 为“0000000000000”,排序并再次替补多“”。 我选择“0000000000000”,以取代以避免与输入的数量的失配。 你可以通过你自己的操作数。