デフォルトのソートが同じ行の先頭から異なる結果を生成するのはなぜですか? [コピー]

デフォルトのソートが同じ行の先頭から異なる結果を生成するのはなぜですか? [コピー]

私はbashで使用していますが、sort最初の文字セットが同じであっても、2つのファイルの順序が異なります。

ファイル1:

  "(0, -11)": "(-1.24636393592-0.992799153308j)", 
  "(0, 1)": "(149.807097864-5.44350795193j)", 
  "(0, 0)": "(17.1604053672+3.88079235934j)", 
  "(0, 11)": "(-1.59903812426-0.923768768117j)", 
  "(0, -1)": "(47.1824114723-21.6682255934j)", 
  "(0, 10)": "(-7.9306816865-1.40521728962j)", 
  "(0, 12)": "(-1.01650580426-1.04187674309j)", 
  "(0, -10)": "(-0.901802059305-0.821904477534j)", 

ファイル2:

  "(0, 0)": "(0.581223595766+0.883221459338j)", 
  "(0, -1)": "(0.0296256019162+0.632637319226j)", 
  "(0, -10)": "(0.792520325166+0.141433946136j)", 
  "(0, 10)": "(-1.20153329399-0.805695804956j)", 
  "(0, 1)": "(0.285821897179-0.508323457505j)", 
  "(0, 11)": "(0.0402120404586-1.57660120897j)", 
  "(0, -11)": "(0.476001913928+0.127280670816j)", 
  "(0, 12)": "(-0.257439911355-1.2545061217j)",

sort file1以下を提供します。

  "(0, 0)": "(17.1604053672+3.88079235934j)", 
  "(0, -10)": "(-0.901802059305-0.821904477534j)", 
  "(0, 10)": "(-7.9306816865-1.40521728962j)", 
  "(0, -11)": "(-1.24636393592-0.992799153308j)", 
  "(0, 11)": "(-1.59903812426-0.923768768117j)", 
  "(0, 1)": "(149.807097864-5.44350795193j)", 
  "(0, 12)": "(-1.01650580426-1.04187674309j)", 
  "(0, -1)": "(47.1824114723-21.6682255934j)", 

sort file2以下を提供します。

  "(0, 0)": "(0.581223595766+0.883221459338j)", 
  "(0, -1)": "(0.0296256019162+0.632637319226j)", 
  "(0, -10)": "(0.792520325166+0.141433946136j)", 
  "(0, 10)": "(-1.20153329399-0.805695804956j)", 
  "(0, 1)": "(0.285821897179-0.508323457505j)", 
  "(0, 11)": "(0.0402120404586-1.57660120897j)", 
  "(0, -11)": "(0.476001913928+0.127280670816j)", 
  "(0, 12)": "(-0.257439911355-1.2545061217j)", 

同様に、sort file1 file2アルファベット順、数字順、またはその他の方法でソートされていないリストが提供されます。

基本的に一度に1文字ずつ比較してソートをアルファベット順にしたいと思います。これらのリストは、違いが発生し始める10番目の文字に達することなく完全に整列可能でなければなりません。しかし、ソートするときに順序が異なるのはなぜですか?

編集1 数値フラグを使用すると、-gまだ-n一貫性のない結果が表示されます。

最初のフィールドに基づいてソートすると、期待どおりに機能します。sort <(cat file1 file2 | cut -f1 -d':')

編集2 私の質問に対する回答については、許可された回答をご覧ください。

私の問題に対する解決策(以下の答えからインスピレーションを得てください)は次のとおりです。

LC_ALL=C sort file1
LC_ALL=C sort file2

これによりバイトソートが実行されます。同じ内容を持つ2つのファイルが同じ順序で終わる限り、ソート順序は気にしません。これが達成されると思います。

編集3

これは他の質問と重複しません。<< 角かっこの並べ替えについて尋ねられませんでした。はい、答えが適用されます。繰り返しの質問と同じ幅広い回答を適用できる個々の質問には違いがあります。ここで重要なのは、私(そしておそらく私の問題を抱えている他の人)が私が経験している問題を見つけるときに他の問題を見つけることができないということです。

長すぎる。重複した質問ではなく、関連回答がある関連質問だけです。 「接続」されている必要があります。重複としてマークされていません。

ベストアンサー1

ソートは、LC_COLLATEロケール設定(または設定されている場合はLC_ALL、両方が設定されていない場合はLANGで置き換え)によって選択された照合規則に従います。その理由は明らかです。言語によってアルファベット順の規則が異なります。

明らかに選択した言語の組み合わせは「-」をスキップします。

$ LC_COLLATE=en_DK sort file2
"(0, 0)": "(0.581223595766+0.883221459338j)", 
"(0, -1)": "(0.0296256019162+0.632637319226j)", 
"(0, -10)": "(0.792520325166+0.141433946136j)", 
"(0, 10)": "(-1.20153329399-0.805695804956j)", 
"(0, 1)": "(0.285821897179-0.508323457505j)", 
"(0, 11)": "(0.0402120404586-1.57660120897j)", 
"(0, -11)": "(0.476001913928+0.127280670816j)", 
"(0, 12)": "(-0.257439911355-1.2545061217j)", 

$ LC_COLLATE=C sort file2
"(0, -1)": "(0.0296256019162+0.632637319226j)", 
"(0, -10)": "(0.792520325166+0.141433946136j)", 
"(0, -11)": "(0.476001913928+0.127280670816j)", 
"(0, 0)": "(0.581223595766+0.883221459338j)", 
"(0, 1)": "(0.285821897179-0.508323457505j)", 
"(0, 10)": "(-1.20153329399-0.805695804956j)", 
"(0, 11)": "(0.0402120404586-1.57660120897j)", 
"(0, 12)": "(-0.257439911355-1.2545061217j)", 

おすすめ記事