“排序-n”和“排序-g”有什么区别?

2 sort numeric-data

-n两个排序选项和之间有什么区别-g

细节太多但文档不够充分,这有点令人困惑。

Gre*_*ine 5

长话短说

\n

虽然-n会对简单的浮点数进行排序,例如1.234,但该-g选项可以处理更广泛的数字格式,但速度较慢。

\n

也是-gPOSIX 规范的 GNU 扩展。

\n
\n

man sort,相关部分是:

\n
     -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

\n

7.1 sort: Sort text files开始,描述/区别更加清晰:

\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

您可以使用此选项对前缀为\n\xe2\x80\x98 0x\xe2\x80\x99 或 \xe2\x80\x98 0X\xe2\x80\x99 的十六进制数字进行排序,其中这些数字不是固定宽度的,或者是\不同情况。然而,对于大小写一致的十六进制数字,并用 \xe2\x80\x98 0\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

按数字排序。该数字以每行开始,由可选的\n空格、可选的 \xe2\x80\x98 -\xe2\x80\x99 符号以及可能\n由千位分隔符分隔的零个或多个数字组成,\n后面可以选择跟一个小数点字符和零个或多个数字。空数\n被视为 \xe2\x80\x98 0\xe2\x80\x99。区域LC_NUMERIC设置指定小数点\n字符和千位分隔符。默认情况下,空白是空格或制表符,但LC_CTYPE区域设置可以更改此设置。

\n

比较准确;没有舍入误差。

\n

前导 \xe2\x80\x98 +\xe2\x80\x99 和指数表示法均无法识别。要以数字方式比较此类字符串,请使用--general-numeric-sort\n( -g) 选项。

\n
\n
\n

快速演示:

\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