Wie funktioniert das Dienstprogramm „Sortieren“? (Warum funktioniert es nicht so, wie ich es mir vorstelle?)

Wie funktioniert das Dienstprogramm „Sortieren“? (Warum funktioniert es nicht so, wie ich es mir vorstelle?)

Ich habe 2 Textdateien:

$ cat /tmp/test1
"AAP" bar
"AEM" bar
"AA" bar
"AEO" bar
"A" bar

$ cat /tmp/test2
"AEM" foo
"AAP" foo
"A" foo
"AEO" foo
"AA" foo

Ich möchte sie sortieren

$ sort /tmp/test1
"AA" bar
"AAP" bar
"A" bar              <-- "A" is in position 3
"AEM" bar
"AEO" bar

$ sort /tmp/test2
"AA" foo
"AAP" foo
"AEM" foo
"AEO" foo
"A" foo              <-- "A" is in position 5

Warum "A"endet inPosition 3 in/tmp/test1und inPosition 5 in/tmp/test2?

Meine Erwartung ist, dassjedes Zeichen pro Spaltewerden verglichen.

Beim Vergleich von Spalte 3 werden daher 'A'und miteinander verglichen, und dies ist der entscheidende Faktor für die endgültige Sortierreihenfolge dieser Testdaten.'E''"'

Offensichtlich habe ich falsch erwartet. Wie soll es also sortfunktionieren, wenn nicht wie erwartet?

Gibt es eine Befehlszeilenoption sortoder ein anderes Dienstprogramm, mit dem ich die gewünschte Sortierreihenfolge erhalten kann?

Antwort1

Sie müssen das Sortierungsgebietsschema ändern. Das von Ihnen beschriebene Verhalten ist typisch für en_USviele andere Gebietsschemas. Beheben Sie es mit:

LC_ALL=C   sort  /tmp/test1

Mehr in dieser Antwort:https://stackoverflow.com/questions/6531674/linux-sort-unexpected-output

Antwort2

Möglicherweise werden nur alphabetische Zeichen berücksichtigt? Daher Aist in diesem Fall das nächste alphabetische Zeichen der bVon-Strich.

verwandte Informationen