gnu sort命令的--general-numeric-sort选项与--numeric-sort选项区别
来源:互联网 发布:mac没有host 编辑:程序博客网 时间:2024/05/21 21:43
sort提供了两种数字排序方式:
-g, --general-numeric-sort compare according to general numerical value -n, --numeric-sort compare according to string numerical value
这两种都是数字排序,有什么区别呢?
先来看看第一种general-numeric-sort,它是用标准C函数把数字转换成双精度浮点数进行比较,支持科学计数法,例如1.23e5。
所以,当序列中有科学计数法的数值时,也可以正确排序,例如:
$ cat test2.txt
1.23e2
1.23456
10.3
2.1
3.5e1
-1
$ sort -g test2.txt
-1
1.23456
2.1
10.3
3.5e1
1.23e2
排序顺序为负数->正数,从小到大排序。
那么,当序列中出现字符串时,怎么排序呢?,比如增加两行数字带有字符串
2a1
2,67
$ cat test2.txt
1.23e2
1.23456
10.3
2.1
2a1
2,67
3.5e1
-1
排序结果:
$ sort -g test2.txt
-1
1.23456
2,67
2a1
2.1
10.3
3.5e1
1.23e2
2,67和2a1可以看作2后面跟着字符串,而sort -g的排序规则是先字符串,然后数字,所以这两个都排在2.1之前。
再根据字符串的排序规则,ASCII码小的排在前面,所以","排在"a"前面。
一般情况下,不建议用-g选项对数字进行排序,因为浮点数的排序比较慢,而且在把数字转换成浮点数时会产生进位误差。
再来看看numeric-sort,按数字大小排序,如果一行中有非数字字符,则按照非数字字符前面的数字大小排序。
还是继续对上一步的test2.txt用-n排序
$ sort -n test2.txt
-1
1.23e2
1.23456
2a1
2.1
3.5e1
10.3
2,67
2a1作为数字2参与排序,因此排在2.1之前。
值得注意的是2,67排在最后,这里我看了半天,显然-n选项没有把","看作是一般的字符串,而是看作了千分位的逗号,因此,2,67实际被作为267参与排序,因而排在最后。
如果把2,67改成2+67,因为“+”的ASCII值小于“a“,所以2+67排在2a1之前,它们两个都作为数字2排在2.1之前。
如果把2,67改成2}67,因为“}“的ASCII值大于“a“,所以2}67会排在2a1后面。
$ sort -n test2.txt
-1
1.23e2
1.23456
2+67
2a1
2.1
3.5e1
10.3
为了确认,对test2.txt进行修改,原文件改为:
$ cat test2.txt
2.1
2a1
2,67
25,00
249
用-n排序:
$ sort -n test2.txt
2a1
2.1
249
2,67
25,00
以上是个人对数字、字符混合排序的一点理解,
为了排序的准确性,建议还是对数字进行格式化,去掉字符变成纯数字后,再用-n进行比大小,这样就省心多了。
参考:
https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html
- gnu sort命令的--general-numeric-sort选项与--numeric-sort选项区别
- sort命令K选项
- sort命令k选项
- Numeric String Sort in C#
- sort命令的k选项大讨论
- sort命令的k选项大讨论
- 理解cut,awk,sort三个命令的分隔符选项
- 理解cut,awk,sort三个命令的分隔符选项
- GNU sort命令详解
- shell中关于sort的-o选项
- sort 和 sort!的区别
- 《sort命令的k选项大讨论》-linux命令五分钟系列之二十七
- 《sort命令的k选项大讨论》-linux命令五分钟系列之二十七
- natsort与sort的区别?
- qsort与sort的区别...
- qsort与sort的区别
- qsort与sort的区别
- 了解 sort 和 uniq 命令 (包括 uniq 的 -u 和 -d 选项)
- 常见的面向对象设计原则
- A值与B值的交换方法
- poj1723
- bzoj4390 Max Flow
- Search Insert Position问题及解法
- gnu sort命令的--general-numeric-sort选项与--numeric-sort选项区别
- 策略模式
- 自学Android之Activity:(五)Activity启动模式
- 炫酷的ViewPager翻页动画
- JavaScript基础知识(10)
- Untiy之Android平台读写遇到的坑
- 简单工厂
- 偶尔放松一下~
- List<T> 高级进阶 实现查询功能FindAll()