Linuxソートのデフォルトの順序は何ですか?


18

長い間、sortプログラムのデフォルトの動作はASCII順序を使用していると考えていました。ただし、sort引数なしで次の行を入力すると:

#
@

私が得た:

@
#

しかし、ASCIIテーブルによると、#35と@64です。別の例は次のとおりです。

A
a

出力は次のとおりです。

a
A

誰もこれを説明できますか?ところで、使用する場合の「辞書順」とは何sort -dですか?


5
ソート順はロケール設定に依存します
-janneb

2
しかし、少なくともGNUソートではデフォルトでアルファベット順です。
ジャーノ

回答:


17

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」の場合、未定義の動作になります。


3
OPは、並べ替え方法を変更するのではなく、並べ替え順序を尋ねています。

1
おかげで、私は自分のマシンでテストしたことがあり、ロケール設定はソート動作に影響します

2

ソート順を決定するには、各行に異なる文字を使用してファイルを作成し、ソートします。結果の出力は、ソート順を示します。


ニース、シンプルで効率的

1
一般的に非常に良いアイデアですが、それだけでは十分ではありません。照合は、個々の文字だけで定義する必要はありません。一部の照合では、「ae」を合字のように処理したり、合字を分解したように処理したりします。別のケースでは、多くの照合が「a」と「A」を等しいものとして扱いますが、テストで表示される順序はそれを示しません(ソートが安定しているかどうかを示す場合があります)。また、単一文字のテストでは、タブの展開、空白の正規化などが有効かどうかはわかりません。それにもかかわらず、開始するには非常に良い場所です。
TextGeek

1
(前のコメントを編集するには遅すぎます)-実際に十分に多様な範囲の文字を含める限り、abABの代わりにaAbBを見ることで大文字と小文字を区別しないように指示できます。
TextGeek

2

前述の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の間で来るbrownjumps事実にもかかわらず、42そしてfox通常は前にそれらを移動する彼らの前の文字を持っています17
____________ ASCII値の順に
1:space = 040、!= 041、#= 043、$= 044、%= 045、@= 0100。(スペースバーを無視して)これは、一部のキーボードではほぼ左から右の順序であることに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.