長い間、私はプログラムの基本的な動作がsort
ASCIIシーケンスを使用することだと思いました。ただし、パラメータなしで次の行を入力すると、次のようになりますsort
。
#
@
私は持っています:
@
#
しかし、ASCIIテーブルによると#
35と64です@
。他の例:
A
a
出力は次のとおりです
a
A
誰でもこれを説明できますか?しかし、これを使用するときの「事前順序」とは何ですかsort -d
?
答え1
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」の場合、未定義の動作が発生します。
答え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
の間には、通常、前の文字に移動する文字が前に続きます。 ____________ 1ASCII値の順序: スペース=040、=041、=043、=044、=045、および=0100。一部のキーボードでは、おおよそ左から右の順序であることに注意してください(スペースバーを無視)。42
fox
brown
jumps
42
fox
17
!
#
$
%
@
答え3
ソート順を決定するには、各行に異なる文字を使用してファイルを作成してソートするだけです。結果の出力はソート順を示します。