Datei nach erster und zweiter Spalte sortieren


13

Wie kann ich eine durch Tabulatoren getrennte Textdatei mit zwei Spalten bearbeiten, indem ich nach dem ersten Element der zweiten Spalte sortiere (nur wenn das erste Spaltenelement dasselbe ist)?

Beispiel:

Eingabedatei 1

A   1-2
A   6-8
A   3-4
B   7-10
B   5-9

Erwartete Ausgabe: Datei 2

A   1-2
A   3-4
A   6-8
B   5-9
B   7-10

Antworten:


22

Verwenden Sie sortdie -kOption , um nach (mehreren) Spalten gleichzeitig zu sortieren:

$ sort -k1,1 -k2n input
A   1-2
A   3-4
A   6-8
B   5-9
B   7-10

-k1,1sortiert zuerst nach der ersten Spalte und dann -k2nnach der zweiten¹ numerisch, wenn die erste Spalte gebunden wurde, sodass Sie Ihre Ausgabe in der gewünschten Reihenfolge erhalten: Sortieren nach dem ersten Element der zweiten Spalte, nur wenn das erste Spaltenelement dasselbe ist.

Bei der numerischen Sortierung wird das Feld nur untersucht, bis es nicht mehr eine Zahl ist, sodass Sie nur das erste Element davon vergleichen können.

Wenn die beiden Schlüssel gleich sind, werden sortdie vollständigen Zeilen als letzter Ausweg lexikalisch verglichen. Zum Beispiel in A 1-10vs A 1-2sind die ersten Tasten identisch ( Astring), und der zweite Schlüssel als auch (beide als die Zahl behandelt werden 1), so ist, dann sortvergleicht A 1-10vs A 1-2lexikalisch und letztere größer als 2Art nach 1. Die GNU - Implementierung von sorthat eine -VOption oder VTastenflag eine ausführen Version sortieren, die die Ausnahme , dass Sequenzen von Dezimalstellen wie ein lexikalischen Vergleich ist innerhalb der Strings numerisch verglichen werden, so sort -k1,1 -k2Vwürde Art A 1-10nach , A 1-2weil 10als eine Zahl größer als 2.


¹ -k2bedeutet technisch gesehen den Teil der Zeile, der mit dem zweiten Feld beginnt (nach dem ersten Übergang von einem Nicht-Leerzeichen zu einem Leerzeichen) und am Ende der Zeile endet, jedoch mit dem nFlag, das -k2,2nnur dem führenden Teil entspricht das ist eine Zahl betrachtet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.