shell – 排序科学和浮动
我一直在拼命地使用命令排序,从科学和浮动值中分类出一个正面和负面的混合物,例如:
-2.0e+00 2.0e+01 2.0e+02 -3.0e-02 3.0e-03 3.0e-02 如果没有浮点或没有科学指数,它就可以正常工作 -3.0e-02 -2.0e+00 2.0e+01 2.0e+02 3.0e-02 3.0e-03 这显然是错误的,因为它应该是: -2.0e+00 -3.0e-02 3.0e-03 3.0e-02 ... 知道如何解决这个问题吗?一旦我解决了这个问题,是否有可能对绝对值进行排序(例如,摆脱负面的价值)?我知道我可以尝试对每个值进行平方,排序,取平方根.这样做我会不那么精确,但是有一个漂亮,快速和直接的方式是很好的. 我的linux系统:8.12,版权所有?2011 非常感谢你! 更新:如果我在调试模式下运行sort -k1 -g filename.dat –debug我得到以下结果(我把它翻译成英文,输出是德文) sort: the sorting rules for ?de_DE.UTF-8" are used sort: key 1 is numerically and involves several fields -3.0e-02 __ ________ -2.0e+00 __ ________ 2.0e+01 _ _______ 2.0e+02 _ _______ 3.0e-02 _ _______ 3.0e-03 _ _______ 解决方法
根据问题下的评论,这是一个区域设置问题:排序是使用区域设置,期望作为小数分隔符,而您的文本有..理想的解决方案是使排序使用不同的区域设置,并希望有人会写一个正确的答案涵盖那个.
但是,如果您不能或不想更改排序的工作方式,那么您可以更改它所获得的输入.这是最简单的方法是从管道中获取输入,并在路上修改它.在这里改变每一个就足够了.到,所以选择的工具是 cat file.dat | tr .,| sort -k1 -g 这个解决方案有一个很大的缺点:if命令是使用sort使用的locale执行的.作为小数分隔符,然后代替修复,这将打破排序.因此,如果您正在编写可能在其他地方使用的shell脚本,请不要这样做. 重要提示:上面的命令有unnecessary use of cat.每个想要??被认为是专业shell脚本程序员的人都不要那样做! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |