Mam plik dwukolumnowy; plik jest już posortowany tak, jak chcę, w kolumnie 1. Chciałbym posortować według kolumny 2, w ramach każdej kategorii kolumny 1. Nie sort
rozumie jednak kolejności sortowania w kolumnie 1.
Normalny sposób (z podobnych pytań tutaj na stosie) byłby następujący:
sort --stable -k1,1 -k2,2n
Ale nie mogę określić sortowania na k1, ponieważ jest to arbitralne.
Przykładowe dane wejściowe:
C 2
C 1
A 2
A 1
B 2
B 1
i wyjście:
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
Możesz użyć transformacji Schwartziana (jest to w zasadzie podejście do dekorowania, sortowania i dekorowania, o którym wspomniałeś w komentarzu, ale prawdopodobnie bardziej wydajne niż dokładna odpowiedź Muru ze względu na użycie pojedynczego wywołania zamiast wielu) - używając kolumny z prefiksem, która przyrosty ze zmianą wartości w pierwszej kolumnie, posortuj według kolumny prefiksu, a następnie kolumny „drugiej” (której pozycja porządkowa została tymczasowo przesunięta z powodu obecności kolumny prefiksu), i na koniec pozbądź się kolumny prefiksu
sort
awk
3
źródło
awk -v OFS="\t" '$1 != prev { key++ } { print key, $0; prev = $1 }
(niesprawdzone).