「sort -n」と「sort -g」の違いは何ですか?

「sort -n」と「sort -g」の違いは何ですか?

2つのソートオプション-nとの違いは何ですか-g

あまりにも詳細があり、文書が十分ではないため、少し混乱しています。

ベストアンサー1

長い話を短く

-nたとえば、単純な浮動小数点数をソートしますが、1.234この-gオプションはより広い範囲の数値形式を処理できますが、遅くなります。

これは-gPOSIX仕様のGNU拡張です。


man sort関連部分は次のとおりです。

     -g, --general-numeric-sort, --sort=general-numeric
             Sort by general numerical value.  As opposed to -n, this option
             handles general floating points.  It has a more permissive format
             than that allowed by -n but it has a significant performance
             drawback.

...

     -n, --numeric-sort, --sort=numeric
             Sort fields numerically by arithmetic value.  Fields are supposed
             to have optional blanks in the beginning, an optional minus sign,
             zero or more digits (including decimal point and possible thou-
             sand separators).

...

STANDARDS
     The sort utility is compliant with the IEEE Std 1003.1-2008 (``POSIX.1'')
     specification.

     The flags [-ghRMSsTVz] are extensions to the POSIX specification.

...

NOTES

...

     When sorting by arithmetic value, using -n results in much better perfor-
     mance than -g so its use is encouraged whenever possible.

infoただし、完全な文書はで提供されていますman

~から7.1ソート:テキストファイルのソート、説明/違いはより明確です。

‘-g’

‘--general-numeric-sort’

‘--sort=general-numeric’

数値でソートして、各行の接頭辞を長い倍精度浮動小数点に変換します。バラより浮動小数点。オーバーフロー、アンダーフロー、または変換エラーは報告されません。次の組み合わせ順序を使用します。

  • 数字で始まらない行(すべて同じと見なされます)
  • NaN(IEEE浮動小数点演算の「数値以外」の値)は一貫していますが、システムによって順序が異なります。
  • 負の無限大。
  • 昇順の有限数(-含む)0そして+0同じ)。
  • しかも無限大。

他の選択肢がない場合にのみこのオプションを使用してください。--numeric-sort-n)よりもはるかに遅く、浮動小数点に変換すると情報が失われる可能性があります。

このオプションを使用すると、固定幅ではないか、大文字と小文字が異なる " 0x"または" "プレフィックスが付いた0X16進数をソートできます。ただし、大文字と小文字が一致し、0左側に「」を埋めて一貫した幅を達成する16進数の場合、標準の事前整列はより高速です。

...

‘-n’

‘--numeric-sort’

‘--sort=numeric’

数値順に並べ替えます。数字は各行を開始し、オプションのスペース、オプションの " -"シンボル、千単位の区切り文字で区切られた0個以上の数字、オプションで小数点文字、および0個以上の数字で構成されます。空の数字は「」として扱われます0。ロケールは、LC_NUMERIC小数点文字と千単位の区切り文字を指定します。デフォルトでは、スペースはスペースまたはタブ文字ですが、LC_CTYPE地域設定に応じて変更できます。

比較的正確です。丸めエラーはありません。

+先行''と指数表記は認識されません.これらの文字列に対して数値比較を実行するには、--general-numeric-sort-g)オプションを使用します。


クイックデモ:

$ printf '%s\n' 0.1 10 1e-2 | sort -n
0.1
1e-2
10

$ printf '%s\n' 0.1 10 1e-2 | sort -g
1e-2
0.1
10

おすすめ記事