Legen Sie die Sortierreihenfolge in der Shellsortierung so fest, dass Sonderzeichen nicht ignoriert werden

Legen Sie die Sortierreihenfolge in der Shellsortierung so fest, dass Sonderzeichen nicht ignoriert werden

Ich suche nach einer Lösung zum Sortieren in Postgres, aber es scheint eher ein Problem der Sortierung zu sein, und daher stelle ich die Frage stattdessen nach dem Standard-Unix-Sortierbefehl.

Mir liegen folgende Daten vor:

A_A1
A\A2
A_A2
A\A1

nach dem Sortieren erhalte ich:

cat test.txt |sort

A_A1
A\A1
A_A2
A\A2

aber ich möchte:

A_A1
A_A2
A\A1
A\A2

Ich habe es auch versucht LANG=C cat..., aber ohne Erfolg. Welche Sortierregel würde es mir also ermöglichen, die Sonderzeichen nicht zu ignorieren?

Antwort1

Aus man sort:

Set LC_ALL=C to get the traditional sort order that uses native byte values.

Also:

$ LC_ALL=C sort test.txt
A\A1
A\A2
A_A1
A_A2

daher sortiert das Gebietsschema C nach dem Bytewert.


Sie müssen

$ cat test.txt | LC_ALL=C sort

wenn Sie es so weiterleiten möchten (versuchen Sie jedoch immer, die Dateinamenversion direkt zu verwenden, wenn diese verfügbar ist).


Die primäre Umgebungsvariable, die dies beeinflusst, ist LC_COLLATE. Wenn LC_ALLjedoch gesetzt ist, übertrumpft sie alle spezifischen LC_Werte. Wenn weder LC_ALLnoch LC_COLLATEgesetzt sind, wird auf zurückgegriffen LANG. WennDasist nicht festgelegt. Der Standardwert ist „locale“ C.

verwandte Informationen