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