Ich habe eine zweispaltige Datei. Die Datei ist in Spalte 1 bereits so sortiert, wie ich es möchte. Ich möchte nach Spalte 2 in jeder Kategorie von Spalte 1 sortieren. Versteht sort
jedoch nicht die Sortierreihenfolge von Spalte 1.
Der normale Weg (von ähnlichen Fragen hier auf Stapel) wäre dieser:
sort --stable -k1,1 -k2,2n
Die Sortierung für k1 kann ich aber nicht angeben, da sie willkürlich ist.
Beispiel Eingabe:
C 2
C 1
A 2
A 1
B 2
B 1
und Ausgabe:
C 1
C 2
A 1
A 2
B 1
B 2
seq 30 | xargs -L1 bash -cs 'yes $1 | head -1000000 | paste - <(seq 1000000) | shuf' bash
Sie könnten eine Schwartzsche Transformation verwenden (dies ist im Grunde der Ansatz, den Sie in einem Kommentar als Dekorieren-Sortieren- Undekorieren bezeichnet haben , aber wahrscheinlich performanter als die gute Antwort von muru, weil Sie einen einzelnen
sort
Aufruf anstelle von mehreren verwenden) - indemawk
Sie eine Präfixspalte hinzufügen, die Inkrementiert mit einer Wertänderung in der ersten Spalte, sortiert nach der Präfixspalte, gefolgt von der "zweiten" Spalte (deren Ordinalposition sich3
aufgrund des Vorhandenseins der Präfixspalte vorübergehend verschoben hat ), und entfernt schließlich die Präfixspaltequelle
awk -v OFS="\t" '$1 != prev { key++ } { print key, $0; prev = $1 }
(ungetestet).