gpt4 book ai didi

shell - 排序科学和 float

转载 作者:行者123 更新时间:2023-12-04 21:40:57 25 4
gpt4 key购买 nike

我一直在拼命尝试使用命令 sort , 从正负的科学值和浮点值中对混合进行排序,例如:

-2.0e+00
2.0e+01
2.0e+02
-3.0e-02
3.0e-03
3.0e-02

没有浮点数或没有科学指数,它工作得很好 sort -k1 -g file.dat .如前所述同时使用两者,结果是:
-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

非常感谢!

更新:如果我在 Debug模式下运行它 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
_
_______

最佳答案

根据问题下的评论,这是一个语言环境问题:sort正在使用预期 , 的语言环境作为小数点分隔符,而您的文本有 . .理想的解决方案是使 sort使用不同的语言环境,希望有人会写出正确的答案。

但是,如果您不能或不想更改方式 sort有效,然后您可以更改它获得的输入。这是最简单的制作 sort从管道中获取其输入,并在途中对其进行修改。这里每.换一次就够了至 , ,所以选择的工具是 tr :

cat file.dat | tr . , | sort -k1 -g 

这个解决方案有一个很大的缺点:如果命令是在 sort 使用的语言环境中执行的 .作为小数点分隔符,而不是固定,这将破坏排序。因此,如果您正在编写可能在其他地方使用的 shell 脚本,请不要这样做。

重要提示:以上命令有 unnecessary use of cat .每个希望自己被视为专业 shell 脚本程序员的人,都不要那样做!

关于shell - 排序科学和 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26339232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com