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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (52)

sort提供两种数字排序。这是从手册页:

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

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

这里有什么不同吗?

提问于
用户回答回答于

通用数字排序将数字作为浮点数进行比较,这允许科学记数法(例如1.234E10),但速度较慢并受四舍五入误差(1.2345678可能在1.2345679之后),数字排序只是一种常规字母排序,它知道10在9之后。

请参阅http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html

'-g''--general-numeric-sort''--sort = general-numeric'使用标准C函数strtod将数字排序,将每行的前缀转换为双精度浮点数。这允许以科学记数法指定浮点数,如1.0e-34和10e100。LC_NUMERIC区域设置确定小数点字符。不要报告溢出,下溢或转换错误。使用以下整理顺序:不以数字开头的行(全部被认为是相等的)。NaNs(IEEE浮点运算中的“非数字”值)以一致但机器相关的顺序排列。减去无限。按数字升序的有限数字(-0和+0相等)。加上无限。 只有在没有其他选择时才使用此选项; 它比--numeric-sort(-n)慢得多,并且在转换为浮点时可能会丢失信息。 '-n''--numeric-sort''--sort = numeric'按数字排序。数字以每行开始,由可选空格,可选' - '符号和可能由千位分隔符分隔的零个或多个数字组成,可选的后跟一个小数点字符和零个或多个数字。一个空的数字被视为'0'。LC_NUMERIC语言环境指定小数点字符和千位分隔符。默认情况下,空格是空格或制表符,但LC_CTYPE区域设置可以更改此设置。 比较确切; 没有舍入错误。 无论是领先的'+'还是指数符号都不被认可。要比较这些字符串的数字,请使用--general-numeric-sort(-g)选项。

用户回答回答于

你应该小心你的语言环境。例如,你可能打算对浮点数进行排序,而你的语言环境可能会使用逗号。

但你使用-n或-g标志可能会产生错误的结果。

在我的情况下,我使用:

LC_ALL=C sort -k 6,6n file

为了排序第6列包含:

2.5
3.7
1.4

为了得到:

1.4
2.5
3.7

所属标签

可能回答问题的人

  • 应用案例分享

    1 粉丝490 提问6 回答
  • o o

    4 粉丝495 提问5 回答
  • 找虫虫

    5 粉丝0 提问5 回答
  • uncle_light

    5 粉丝518 提问4 回答

扫码关注云+社区

领取腾讯云代金券