2016-11-01 14 views
5

私は次の行含むテキストファイルを作成した場合:予期しないbashのソート動作

>TESTTEXT_10000000 
>TESTTEXT_1000000 
>TESTTEXT_10000002 
>TESTTEXT_10000001 

sort myfileを実行し、私はに/ 1/2を追加した場合、私の出力は、しかし

>TESTTEXT_1000000 
>TESTTEXT_10000000 
>TESTTEXT_10000001 
>TESTTEXT_10000002 

です私の行はソートの出力が大幅に変化し、私はその理由を知らない。

入力:

>TESTTEXT_10000000/1 
>TESTTEXT_1000000/1 
>TESTTEXT_10000002/1 
>TESTTEXT_10000001/1 

出力:

>TESTTEXT_10000000/1 
>TESTTEXT_1000000/1 
>TESTTEXT_10000001/1 
>TESTTEXT_10000002/1 

入力:

>TESTTEXT_10000000/2 
>TESTTEXT_1000000/2 
>TESTTEXT_10000002/2 
>TESTTEXT_10000001/2 

出力:

>TESTTEXT_10000000/2 
>TESTTEXT_10000001/2 
>TESTTEXT_1000000/2 
>TESTTEXT_10000002/2 

スラッシュはセパレータとして認識されていますか? --field-speratorを使用しても動作は変更されませんでした。もしそうなら、なぜ1000001/2と1000002/2の間に1000000/2が入りますか?人間のソート、数値ソート、または他のオプションを使用すると、一貫性が決して決して得られませんでした。誰でもここで私を助けることができますか?

:編集: それは関連があると思われるので、答えを考えると、このマシン上でLC_ALLの値がen_GB.UTF-8

+2

はこれを試してみてください: 'LC_ALL = Cソートファイル ' – user000001

答えて

3

/はあなたのロケールで0前です。 LC_ALL=Cまたは他のロケールを使用すると、何も変更されません。あなたがソートするセパレータとキーを指定することができます

sort -V myfile 

オルタナティブ:あなたが適切-V ERSIONの並べ替えを使用することができるだろうご利用の場合は

sort -t/ -k1,1 myfile 
+0

奇妙なことに、LC_ALL = Cは私の問題を解決し、注文の一貫性を保ちました。しかし、ソートの-Vオプションもロケールを変更せずに問題を解決しましたので、この回答を受け入れます。 – TDierckx