在命令行中,排序时“一般”和“字符串”数值是什么?

在命令行中,排序时“一般”和“字符串”数值是什么?

根据“man sort”,有两种按数字排序的方法:

-g, --general-numeric-sort
          compare according to general numerical value

-n, --numeric-sort
          compare according to string numerical value

这些“价值观”有什么区别?

下面的例子不足以向我证明这一点

$ cat numbers.txt
 1
 1.0
01
010
10

$ sort -n numbers.txt
01
 1
 1.0
010
10

$ sort -g numbers.txt
01
 1
 1.0
010
10

答案1

Stack Overflow 上已经回答了这个问题:

gnu sort 中的 --general-numeric-sort 和 --numeric-sort 选项有什么区别

从答案来看:

常规数字排序将数字作为浮点数进行比较,这允许使用科学计数法,例如 1.234E10,但速度较慢且容易出现舍入误差(1.2345678 可能在 1.2345679 之后),数字排序只是一种常规的字母排序,它知道 10 在 1 之后。

来自GNU 排序手册

仅在没有其他选择时才使用 [一般数字排序];它比 --numeric-sort (-n) 慢得多,并且在转换为浮点时可能会丢失信息。

相关内容