unix-Sortierung, mit primären und sekundären Schlüssel
Möchte ich Sortieren einer Datei auf mehrere Felder.
Eine Probe tab-getrennte Datei:
a 1 1.0
b 2 0.1
c 3 0.3
a 4 0.001
c 5 0.5
a 6 0.01
b 7 0.01
a 8 0.35
b 9 2.3
c 10 0.1
c 11 1.0
b 12 3.1
a 13 2.1
Und ich möchte, um es sortiert alphabetisch nach Feld 1 (mit -d
), und wenn Feld1 ist das gleiche, Sortieren nach Feld 3 (mit der -g
option).
Einem nicht gelingt, dies zu tun. Meine versucht wurden (mit einer echten TAB-Zeichen anstelle von <TAB>
):
cat tst | sort -t"<TAB>" -k1 -k3n
cat tst | sort -t"<TAB>" -k1d -k3n
cat tst | sort -t"<TAB>" -k3n -k1d
Keiner dieser arbeiten. Ich bin mir nicht sicher, ob Art ist sogar in der Lage, dies zu tun. Ich Schreibe ein Skript für Abhilfe, so bin ich nur neugierig, ob es eine Lösung mit nur Art.
Die
Ja, natürlich, das wird mein workaround, wie ich erwähnte. Ich wollte nur wissen, ob man es mit reinen Art
sort
Befehl scheint nicht zu unterstützen. Betrachten Sie den Wechsel zu einer Sprache wie Python oder Perl statt.Ja, natürlich, das wird mein workaround, wie ich erwähnte. Ich wollte nur wissen, ob man es mit reinen Art
InformationsquelleAutor zseder | 2010-07-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Handbuch zeigt einige Beispiele.
In übereinstimmung mit zseder Kommentar, das funktioniert:
Tab sollte theoretisch funktionieren auch wie diese
sort -t"\t"
.Wenn keines der oben genannten Arbeit zu begrenzen, indem Sie tab, das ist ein hässlicher workaround:
sort -t"<TAB>" -k1,1d -k3,3g
) Allerdings fand ich nicht, was das Komma bedeutet, dass für die Art, in der verlinkten Anleitung und die normale manuelle Seite. Ich habe zu google mehr dazu. Und ja, ich kann irgendwie mit tabs. Ich kann die sed es, irgendein anderes Trennzeichen, und ich kann geben Sie TAB, um mein terminal mit "Strg+v; TAB", also ist es kein problem, ich wollte nur klar machen, das ist nicht was ich falsch mache. Anyways, Danke!Sie könnte auch eine Registerkarte erstellen, ohne Verwendung von
echo
oder Strg+v:TAB=$'\t'
. @zseder: Das Komma ist ein range-operator in diesem Zusammenhang. Das argument-k1,1d
bedeutet "Schlüssel erstellen, beginnend bei Spalte eins und endet bei Spalte ein Wörterbuch um".Und wie kommt es, dass -k1d nicht gleich mit -k1,1d? Meine Absicht ist, dass diese die gleiche sein sollte...
Jetzt verstehe ich. Mit -k1d ich nur, um zu Sortieren, verwenden Sie die Felder ab 1
InformationsquelleAutor Janick Bernet
Hier ist ein Python-Skript, das Sie verwenden könnten als Ausgangspunkt:
InformationsquelleAutor Philipp