シェルソートの照合順序を設定して特殊文字を無視しないようにする

シェルソートの照合順序を設定して特殊文字を無視しないようにする

私は postgres でのソートの解決策を探していますが、それは照合の問題であるように思われるので、代わりに標準の Unix ソート コマンドについて質問します。

以下のデータがあります:

A_A1
A\A2
A_A2
A\A1

ソートすると次のようになります:

cat test.txt |sort

A_A1
A\A1
A_A2
A\A2

でも私はしたい:

A_A1
A_A2
A\A1
A\A2

私も試してみましたLANG=C cat...が、うまくいきませんでした。それでは、どの照合ルールを使用すれば特殊文字を無視しないことができるのでしょうか?

答え1

からman sort

Set LC_ALL=C to get the traditional sort order that uses native byte values.

それで:

$ LC_ALL=C sort test.txt
A\A1
A\A2
A_A1
A_A2

したがって、C ロケールはバイト値の後にソートします。


あなたがする必要があるのは

$ cat test.txt | LC_ALL=C sort

このようにパイプしたい場合(ただし、ファイル名バージョンが利用可能な場合は常に直接使用するようにしてください)。


これに影響を与える主な環境変数は ですLC_COLLATELC_ALLが設定されている場合は、すべての特定のLC_値よりも優先されます。 も も設定されていない場合はLC_ALLLC_COLLATEフォールバックしますLANGそれ設定されていない場合は、デフォルトで locale になりますC

関連情報