ソート(デフォルトオプションと数値オプションの違い -n)

ソート(デフォルトオプションと数値オプションの違い -n)

マニュアルページによると、sortコマンドの--numeric-sortオプションの説明は次のとおりです。

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

文字列数値とは、各文字列文字のASCII値を連続的に比較することを意味すると仮定しますか?

情報ページを読む

‘-n’
‘--numeric-sort’
‘--sort=numeric’
     Sort numerically.  The number begins each line and consists of
     optional blanks, an optional ‘-’ sign, and zero or more digits
     possibly separated by thousands separators, optionally followed by
     a decimal-point character and zero or more digits.  An empty number
     is treated as ‘0’.  The ‘LC_NUMERIC’ locale specifies the
     decimal-point character and thousands separator.  By default a
     blank is a space or a tab, but the ‘LC_CTYPE’ locale can change
     this.

     Comparison is exact; there is no rounding error.

     Neither a leading ‘+’ nor exponential notation is recognized.  To
     compare such strings numerically, use the ‘--general-numeric-sort’
     (‘-g’) option.

両方の文書を読み取った後でも、-n オプションで使用される照合順序の明確な説明はまだ表示されません。

--numeric-sortオプションはデフォルトオプションとどう違うのですか?私の無邪気な推測は、数字が文字よりも優先されるということです。しかし、ドキュメントではこれを読んでいません。

これを明確に説明する文書は何ですか?つまり、ドキュメントを参照してこの情報をどこで見つけることができますか?

ベストアンサー1

数字が複数ある場合はsort -n考慮してください。みんな番号;デフォルトでは、このファイル

3
2
1
20
30

次のようにソートされます。

1
2
20
3
30

これはあなたが望むものではないかもしれません。を使用すると、-n次のようになります。

1
2
3
20
30

数値ソートでは、負数、小数点、および千単位の区切り文字(ロケールによって決まります)も処理します。後ろに「数字以外の」テキストがある場合は、ソート順では無視されます。行スタート数値以外のコンテンツの場合、その行はゼロとしてカウントされます。

より正確には、ロジックは次のようになります。 (デフォルト)ソートキーは次のとおりです。初期数値文字列。 (つまり、「各行で数字が始まります」)文字列は、空白、マイナス記号、0個以上の数字、そしておそらく.そして,(または他のもの)。末尾の文字は考慮されません。「数字」の一部ではありません。。行が数字で始まらない場合は、次のように処理されます。見えない("空") 0 と同じ数です。 (または「数字がゼロの数字」)

したがって、「数字」をソートした後(与えられたソートキーを使用して比較-k)、残りの行がある場合はその行をソートします。デフォルトのソートの使用。 (つまり、1a以前1b1a20以前です1a3。)みんな行はこのようにソートされますが、ソートキー以外の行はソートされません。この場合、奇妙な動作が発生します(0cookiessort今後 biscuits- 2次ソートの場合、「見えない0」は追加されません。

通常、-n数値で構成される行(またはフィールド)をソートしたい場合に使用されます。数値以外の項目が多い場合、または数値が他の文字列と混在している場合でも、一貫した結果を得ることができますが、目的の結果ではない可能性があります。

好みの文字と数字(そして両方を含む行)を混在させると、-V次のようになります。バージョンの並べ替え~によると特別なルール文字列を論理コンポーネントに分割します。しかし、これを行うには注意してください。1.10 高い比較する1.9

おすすめ記事