26

私は 2 台の Linux マシンを持っていますが、これらのマシンでは UNIX ソートの動作が異なるようです。アンダースコア文字の扱いに絞り込んだと思います。

を実行するsort tmpと、tmp には次の 2 行が含まれます。

aa_d_hh
aa_dh_ey

1台のマシンが出力

aa_d_hh
aa_dh_ey

(つまり、'_' が 'h' の前にある) 一方、他の出力は

aa_dh_ey
aa_d_hh

(つまり、'h' は '_' に先行します)。これらのマシンが一緒に動作する必要があります (非常に大きなファイルをマージするために、後で sort -m を使用するため)。

ソートを何らかの方法で強制的に動作させる方法はありますか?

ありがとう。

4

5 に答える 5

38

LC_COLLATEコマンドだけで従来の並べ替え順序に設定できます。

env LC_COLLATE=C sort tmp

これにより、現在の環境は変更されず、sort コマンドが実行される環境だけが変更されます。これと同じ動作をする必要があります。

于 2009-07-26T11:28:33.960 に答える
4

ソート順は、環境変数 LC_COLLATE の現在の値によって異なります。「locale」、「setlocale」などについては、ローカルのドキュメントを確認してください。両方のマシンで LC_COLLATE を「POSIX」に設定すると、結果が一致するはずです。

于 2009-07-26T11:07:59.400 に答える
0

違いはロケールによるものです。localeコマンドを使用して、現在の設定を確認します。

、 、などLC_COLLATE、さまざまなロケール カテゴリが多数あります。環境変数またはを設定してそれらをすべて変更することも、環境変数 を設定して照合 (ソート) 順序のみを変更することもできます。ロケールorは、標準で定義された基本的なロケールです。その他には、(米国英語)、(フランス語) などがあります。LC_TIMELC_MESSAGESLC_ALLLANGLC_COLLATECPOSIXen_USfr_FR

于 2009-07-26T11:26:53.683 に答える