0

sortを使用してファイルの行をアルファベット順に並べ替えていますが、奇妙な結果が得られます。文字の10進コードを使ってソートしていると思ったのですが、そうではありません。つまり、'E' (10 進コード 69) は 'e' (10 進コード 101) の後に続き、'0' (コード 48) は ':' (コード 58) の後に続きます。
使ってみた

if [[ "E" < "e" ]]; then echo "true"; else echo "false"; fi

if [[ "0" < ":" ]]; then echo "true"; else echo "false"; fi

正しい答えが得られるかどうかを確認しますが、そうではありません。私はubuntu 12.04に取り組んでおり、環境のエンコーディングとソートしようとしているファイルはen_us.UTF-8に定義されています。

問題は、行がアルファベット順にソートされていると仮定して、Java プログラムでこれらのファイルを解析する必要があることです。そのため、Java が文字の 10 進数コードに従って文字列を比較している間、ファイル内の行が同じ順序に従ってソートされていないため、解析が失敗します。

この順序に従ってファイルをソートする別の方法を使用するか、ソートに10進数コードを使用するように強制することにより、誰かがこれを解決するのを手伝ってくれませんか。

助けてくれてありがとう。

4

1 に答える 1

2

マニュアルの警告。

   *** WARNING *** The locale specified by the  environment  affects  sort
   order.  Set LC_ALL=C to get the traditional sort order that uses native
   byte values.

これを試して:

$ LC_ALL=C sort input.txt 
0
:
E
e

($はシェルプロンプト)

于 2012-08-13T10:11:18.623 に答える