gnu sort中的–general-numeric-sort和–numeric-sort选项有什么不同?

sort提供了两种数字sorting。 这是从手册页:

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

有什么不同?

一般数字sorting比较数字作为浮动,这允许科学记数法,例如1.234E10,但速度较慢,并受四舍五入误差(1.2345678可能会在1.2345679之后),数字sorting只是一个普通的字母sorting,知道10到9之后。

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

'-g''–general-numeric-sort''–sort = general-numeric'使用标准C函数strtod将数字sorting,将每行的前缀转换为双精度浮点数。 这允许浮点数以科学记数法指定,如1.0e-34和10e100。 LC_NUMERIC区域设置确定小数点字符。 不要报告溢出,下溢或转换错误。 使用下面的整理顺序:不以数字开头的行(全部被认为是相等的)。 NaNs(IEEE浮点运算中的“非数字”值)以一致的但与机器相关的顺序。 减去无限。 按数字升序的有限数字(-0和+0相等)。 加上无限。

只有在没有其他select时才使用此选项; 它比–numeric-sort(-n)慢得多,并且在转换为浮点时可能会丢失信息。

'-n''–numeric-sort''–sort = numeric'按数字sorting。 数字以每行开始,由可选的空格,可选的“ – ”符号和可能由千位分隔符分隔的零个或多个数字组成,可选的后跟一个小数点字符和零个或多个数字。 一个空的数字被视为“0”。 LC_NUMERIC语言环境指定小数点字符和千位分隔符。 默认情况下,空格是一个空格或制表符,但是LC_CTYPE区域设置可以改变它。

比较确切; 没有舍入错误。

既不是领先的“+”也不是指数符号。 要比较这些string的数字,请使用–general-numeric-sort(-g)选项。

你应该小心你的语言环境。 例如,你可能打算sorting一个浮点数(如2.2),而你的语言环境可能会使用一个逗号(如2,2)。

正如在这个论坛中所报道的那样,使用-n或-g标志可能会产生错误的结果。

在我的情况下,我使用:

 LC_ALL=C sort -k 6,6n file 

为了sorting第六列包含:

 2.5 3.7 1.4 

为了得到

 1.4 2.5 3.7