Wiem, że opcja -k dla sortowania uniksowego pozwala nam sortować według określonej kolumny i wszystkich poniższych . Na przykład, biorąc pod uwagę plik wejściowy:
2 3
2 2
1 2
2 1
1 1
Za pomocą sort -n -k 1
otrzymuję dane wyjściowe posortowane według pierwszej kolumny, a następnie według drugiej:
1 1
1 2
2 1
2 2
2 3
Chcę jednak zachować kolejność drugiej kolumny, tak jak poniżej:
1 2
1 1
2 3
2 2
2 1
Czy jest to możliwe dzięki sort
poleceniu?
join
jest, aby dane wejściowe były sortowane według pól, do których dołączasz . Więc upewnij się, że dane wyjściowe są posortowane według pierwszego pola i możesz do niego dołączyć.-k 1,1
( Część „ 1 ”) nie działa dla mnie lepiej. Działa-s -k 1
,-n
jeśli potrzebujesz.Aby posortować tylko według pierwszej kolumny, należy:
Z podręcznika administracji systemu Unix i Linux
źródło
-s
opcję, jak wskazał Cascabel.-s
mówi: „Ta opcja zachowuje oryginalną kolejność rekordów, które mają taki sam klucz”.Żadna z podanych odpowiedzi nie działa ogólnie dla mnie.
Zarówno
sort -s -k 2 file1
isort -n -k1,1
dodatkowe sortowanie za pomocą tego pliku:Po prostu musiałem zrobić dokładnie to i skończyłem na pętli powłoki. To rozwiązanie może nie działać dobrze w przypadku bardzo dużego pliku, ponieważ należy odczytać cały plik dla każdej unikalnej wartości w posortowanej kolumnie.
Tutaj plik jest sortowany tylko w kolumnie 2.
źródło
sort -s -k2,2 file1