長い間、sort
プログラムのデフォルトの動作はASCII順序を使用していると考えていました。ただし、sort
引数なしで次の行を入力すると:
#
@
私が得た:
@
#
しかし、ASCIIテーブルによると、#
35と@
64です。別の例は次のとおりです。
A
a
出力は次のとおりです。
a
A
誰もこれを説明できますか?ところで、使用する場合の「辞書順」とは何sort -d
ですか?
長い間、sort
プログラムのデフォルトの動作はASCII順序を使用していると考えていました。ただし、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
前くる42
、とfox
の間で来るbrown
とjumps
事実にもかかわらず、42
そしてfox
通常は前にそれらを移動する彼らの前の文字を持っています17
。
____________ ASCII値の順に
1:space = 040、!
= 041、#
= 043、$
= 044、%
= 045、@
= 0100。(スペースバーを無視して)これは、一部のキーボードではほぼ左から右の順序であることに注意してください。