
Ich habe eine Menge Zeichenfolgen (ungefähr 300) und sie bestehen alle aus 4 Buchstaben, sodass
XYZA, ZHF3, RTt2 etc.
ich sie je nach den beiden Anforderungen sortieren möchte.
- Sortieren Sie sie nach den letzten beiden Buchstaben
- Sortieren Sie die Wörter, die die gleichen 2 letzten Buchstaben enthalten, abhängig von den ersten 2 Buchstaben
Das heißt, ich habe Zeichenfolgen im Format XXYY und möchte diese nach den angezeigten Regeln sortieren.
Ich versuche, dies mit zu tun, sort -k.1.3,1.4
aber die mit demselben sind zufällig sortiert, z. B. nach dem Motto „ 15AA, a2AA, 0CAA etc.
Wie werde ich es los?“
Antwort1
-k
kann mehr als einmal verwendet werden. Wenn mehrere Schlüsselfelder vorhanden sind, werden spätere Schlüssel erst verglichen, wenn alle früheren Schlüssel gleich sind.
<datafile sort -k 1.3,1.4 -k 1.1,1.2
Und denken Sie daran, dass die Sortierung davon abhängt LC_COLLATE
.
Antwort2
Führen Sie die Operationen in umgekehrter Reihenfolge aus – sortieren Sie zuerst nachdie ersten beidenBuchstaben und dann durch die letzten beiden. Ich denke, Sie können sogar Folgendes tun:
cat file | sort | sort -k 1.3 -s
Der sort
Befehl kann Folgendes ausführen:stabilSortieren, d. h. wenn zwei Zeilen „gleich“ sind, bleibt ihre relative Reihenfolge zueinander erhalten. Im zweiten Schritt behalten also die Zeilen mit identischem 3. bis 4. Buchstaben bequemerweise ihre Reihenfolge aus dem ersten Schritt.