长话短说
\n虽然-n
会对简单的浮点数进行排序,例如1.234
,但该-g
选项可以处理更广泛的数字格式,但速度较慢。
也是-g
POSIX 规范的 GNU 扩展。
从man sort
,相关部分是:
-g, --general-numeric-sort, --sort=general-numeric\n Sort by general numerical value. As opposed to -n, this option\n handles general floating points. It has a more permissive format\n than that allowed by -n but it has a significant performance\n drawback.\n\n...\n\n -n, --numeric-sort, --sort=numeric\n Sort fields numerically by arithmetic value. Fields are supposed\n to have optional blanks in the beginning, an optional minus sign,\n zero or more digits (including decimal point and possible thou-\n sand separators).\n\n...\n\nSTANDARDS\n The sort utility is compliant with the IEEE Std 1003.1-2008 (``POSIX.1\'\')\n specification.\n\n The flags [-ghRMSsTVz] are extensions to the POSIX specification.\n\n...\n\nNOTES\n\n...\n\n When sorting by arithmetic value, using -n results in much better perfor-\n mance than -g so its use is encouraged whenever possible.\n
Run Code Online (Sandbox Code Playgroud)\n但是,完整的文档由 提供,info
而不是man
。
从7.1 sort: Sort text files开始,描述/区别更加清晰:
\n\n\n\n
\xe2\x80\x98-g\xe2\x80\x99
\n
\xe2\x80\x98--general-numeric-sort\xe2\x80\x99
\n
\xe2\x80\x98--sort=general-numeric\xe2\x80\x99
按数字排序,将每行的前缀转换为长\n双精度浮点数。请参阅浮点。不报告上溢、下溢或转换错误。使用\n以下整理顺序:
\n\n
\n- 不以数字开头的行(都被认为是相等的)。
\n- NaN(在 IEEE 浮点算术中,\xe2\x80\x9c 不是 Number\xe2\x80\x9d 值),顺序一致但与机器相关。
\n- 负无穷大。
\n- 按升序排列的有限数(- 0和 + 0相等)。
\n- 再加上无穷大。
\n仅当没有其他选择时才使用此选项;它比
\n--numeric-sort
(-n
) 慢得多,并且在转换为浮点时可能会丢失信息。您可以使用此选项对前缀为\n\xe2\x80\x98
\n0x
\xe2\x80\x99 或 \xe2\x80\x980X
\xe2\x80\x99 的十六进制数字进行排序,其中这些数字不是固定宽度的,或者是\不同情况。然而,对于大小写一致的十六进制数字,并用 \xe2\x80\x980
\xe2\x80\x99 填充到一致的宽度,标准字典排序\n会更快。...
\n\n
\xe2\x80\x98-n\xe2\x80\x99
\n
\xe2\x80\x98--numeric-sort\xe2\x80\x99
\n
\xe2\x80\x98--sort=numeric\xe2\x80\x99
按数字排序。该数字以每行开始,由可选的\n空格、可选的 \xe2\x80\x98
\n-
\xe2\x80\x99 符号以及可能\n由千位分隔符分隔的零个或多个数字组成,\n后面可以选择跟一个小数点字符和零个或多个数字。空数\n被视为 \xe2\x80\x980
\xe2\x80\x99。区域LC_NUMERIC
设置指定小数点\n字符和千位分隔符。默认情况下,空白是空格或制表符,但LC_CTYPE
区域设置可以更改此设置。比较准确;没有舍入误差。
\n前导 \xe2\x80\x98
\n+
\xe2\x80\x99 和指数表示法均无法识别。要以数字方式比较此类字符串,请使用--general-numeric-sort
\n(-g
) 选项。
快速演示:
\n$ printf \'%s\\n\' 0.1 10 1e-2 | sort -n\n0.1\n1e-2\n10\n\n$ printf \'%s\\n\' 0.1 10 1e-2 | sort -g\n1e-2\n0.1\n10\n
Run Code Online (Sandbox Code Playgroud)\n