LC_COLLATE を使用して、小文字が大文字の前に来るようにソート順を指定します。

LC_COLLATE を使用して、小文字が大文字の前に来るようにソート順を指定します。

与えられたファイル:

$ cat file
1
a
C
B
2
c
3
A
b

基本的にはsort次のようになります。

$ sort file
1
2
3
a
A
b
B
c
C

これにより、LC_COLLATE=C大文字が小文字の前にソートされます。

$ LC_COLLATE=C sort file
1
2
3
A
B
C
a
b
c

大文字と小文字の逆順(たとえば、数字、小文字、大文字の順)で並べ替えることはできますか?

ベストアンサー1

デフォルトでは、その順序でソートされるロケールはわかりません。解決策は、カスタムソート順序を使用してカスタムロケールを作成することです。 4年後の誰かがカスタマイズされた方法で整理したい場合は、ここにコツがあります。

ほとんどのロケールは、独自のソート順序を指定せずに、代わりに/usr/share/i18n/locales/iso14651_t1_common編集したい場合に備えて、ロケールで定義されているソート順序をコピーします。iso14651_t1_commonほぼすべてのロケールのソート順を変更するには、元のファイルを変更するよりもコピーを作成することをお勧めします。ソート順がどのように機能するか、および$HOMEルートアクセスなしでディレクトリにカスタムロケールを作成する方法の詳細については、以下を参照してください。この似たような質問に対する答えから

次の項目に従ってa合計がどのようにソートされるかを確認してください。Aiso14651_t1_common

<U0061> <a>;<BAS>;<MIN>;IGNORE # 198 a
<U0041> <a>;<BAS>;<CAP>;IGNORE # 517 A

bそしてB似ています:

<U0062> <b>;<BAS>;<MIN>;IGNORE # 233 b
<U0042> <b>;<BAS>;<CAP>;IGNORE # 550 B

最初のパスでは、両方とも組み合わせ記号をa持ち、両方とも組み合わせ記号を持っていることがわかります。以前に表示され、以前と並置されるためです。 2番目のパスでは、4文字すべてが組み合わせ記号を持っているため、同点は壊れませんが、3番目のパスでは、小文字の組み合わせ記号が大文字の組み合わせ記号(行3467)の前の行3467に表示されるため、動点は解決されます。 ).3488ライン)。したがって、ソート順序は、、、となります。A<a>bB<b><a><b>iso14651_t1_commonaAbB<BAS><MIN><CAP>aAbB

最初と3番目の組み合わせ記号を置き換えると、文字を最初に大文字と小文字(小さい方の大きいもの)でソートし、次にアクセント(<BAS>アクセントがない場合)でソートし、アルファベット順にソートします。 しかし、<MIN>そして<CAP>すべてが数字の前にあるので、文字の後に数字を配置することは望ましくない効果があります。

作成時に最初に数字を入れる最も簡単な方法みんな小文字の最初みんな大文字がすることは、最初の比較中にすべての文字を同じに設定して連結することです<a>。大文字と小文字をアルファベット順に並べ替えるには、最後の対照記号をIGNORE現在の最初の対照記号に変更します。このパターンによると、次のようaになります。

<U0061> <a>;<BAS>;<MIN>;<a> # 198 a

Aになります:

<U0041> <a>;<BAS>;<CAP>;<a> # 517 A

bになります:

<U0062> <a>;<BAS>;<MIN>;<b> # 233 b

Bになります:

<U0042> <a>;<BAS>;<CAP>;<b> # 550 B

残りの文字についても同様です。

カスタムバージョンを作成したら、iso14651_t1_common次のガイドラインに従ってください。上記の回答カスタムロケールをコンパイルします。

おすすめ記事