長い間、私はsort
プログラムのデフォルトの動作がASCII orderを使用していると思っていました。ただし、次の行をsort
に引数なしで入力すると:
#
@
私は得ました:
@
#
しかし、ASCIIテーブルによると、#
は35、@
は64です。別の例は次のとおりです。
A
a
そして出力は:
a
A
誰かがこれを説明できますか?ところで、sort -d
を使用する場合の「辞書順」とは何ですか?
POSIX以外のロケールを使用しているようです。
試してください:
export LC_ALL=C
そしてsort
。
info sort
明確に言う:
(1)非POSIXロケールを使用する場合(たとえば、「LC_ALL」を「en_US」に設定することにより)、「sort」は、慣れている方法とは異なる方法でソートされた出力を生成する場合があります。その場合、「LC_ALL」環境変数を「C」に設定します。 `LC_COLLATE 'だけを設定すると2つの問題があることに注意してください。まず、 `LC_ALL 'も設定されていると効果がありません。第二に、 `LC_CTYPE '(または` LC_CTYPE'が設定されていない場合は `LANG ')が互換性のない値に設定されている場合、動作は未定義です。たとえば、「LC_CTYPE」が「ja_JP.PCK」であるが「LC_COLLATE」が「en_US.UTF-8」である場合、未定義の動作が発生します。
man sort
が言うように、「辞書順」は「空白と英数字のみを考慮する」ことを意味します。たとえば、与えられたデータ
The
!quick
brown
@fox
jumps
#over
17
$lazy
dogs
%42
times.
装飾されていないsort
コマンドは
dogs
!quick
#over
$lazy
%42
@fox
17
brown
jumps
The
times.
(スペース文字と!
、#
、$
、%
、および@
記号で始まる行を置く1 文字と数字で始まる行の前。つまり、英数字)ですが、sort -d
は
dogs
17
%42
brown
@fox
jumps
$lazy
#over
!quick
The
times.
dogs
は、スペースで始まるため、最初ですが、特殊(句読点)文字は無視されます。 17
とfox
の前に通常は42
の前に移動する文字があるにもかかわらず、42
は17
の前にあり、brown
はjumps
とfox
の間にあります。
____________
1 ASCII値の順番:space = 040、!
= 041、#
= 043、$
= 044、%
= 045、@
= 0100。この(スペースバーを無視して)一部のキーボードでは、左から右の順序です。
ソート順を決定するには、各行に異なる文字を含むファイルを作成し、それをソートします。結果の出力は、ソート順を示します。