加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell – 排序科学和浮动

发布时间:2020-12-15 22:35:10 所属栏目:安全 来源:网络整理
导读:我一直在拼命地使用命令排序,从科学和浮动值中分类出一个正面和负面的混合物,例如: -2.0e+002.0e+012.0e+02-3.0e-023.0e-033.0e-02 如果没有浮点或没有科学指数,它就可以正常工作 sort -k1 -g file.dat.如前所述同时使用两者,它会导致: -3.0e-02-2.0e+002.
我一直在拼命地使用命令排序,从科学和浮动值中分类出一个正面和负面的混合物,例如:

-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

非常感谢你!

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

解决方法

根据问题下的评论,这是一个区域设置问题:排序是使用区域设置,期望作为小数分隔符,而您的文本有..理想的解决方案是使排序使用不同的区域设置,并希望有人会写一个正确的答案涵盖那个.

但是,如果您不能或不想更改排序的工作方式,那么您可以更改它所获得的输入.这是最简单的方法是从管道中获取输入,并在路上修改它.在这里改变每一个就足够了.到,所以选择的工具是tr

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

这个解决方案有一个很大的缺点:if命令是使用sort使用的locale执行的.作为小数分隔符,然后代替修复,这将打破排序.因此,如果您正在编写可能在其他地方使用的shell脚本,请不要这样做.

重要提示:上面的命令有unnecessary use of cat.每个想要??被认为是专业shell脚本程序员的人都不要那样做!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读