2012-06-12 9 views
15

Potrzebuję sortować plik płaski według trzeciej kolumny, pozostawiając pierwszą kolumnę nienaruszoną [Pierwsza kolumna jest już posortowana] (w systemie Linux). (druga kolumna może się zmienić)Sortuj według trzeciej kolumny pozostawiając pierwszą i drugą kolumnę nienaruszoną (w systemie Linux)

Przykład I plik/p: -

b:di:wave 
b:di12:red 
b:di12:wave 
b:di06:pir 

powinna wyglądać następująco: -

b:di06:pir 
b:di12:red 
b:di12:wave 
bast:di:wave 

Próbowałem kilka opcji sortowania ale mogłem sort tylko przez drugą kolumnę ale nie trzeci.

Czy ktoś może pomóc?

+0

Proszę edytować swoje pytanie; nie umieszczaj tego nieczytelnego bałaganu w komentarzu. –

Odpowiedz

37

Spróbuj tego:

sort -t: -k1,1 -k3 data.txt 

daje:

bast:disp-san-d5-06:piranha 
bast:display-san-12:redbird 
bast:display-san-07:waverider 
bast:display-san-12:waverider 

To będzie sortować z 1. pola klucza jako podstawowy i 3rd polu jako wtórnego klucza podziału linii na polach przez :

Szczegóły:

data.txt zawiera 4 wiersze ze swojego wpisu.

Można określić wiele pól jako kluczy sortowania, zobacz man page

-k1,1 oznacza porządek na pierwszym dziedzinie (start na polu 1 i na końcu w polu 1, w przeciwnym razie nadal korzystać resztę linii do określenia rodzaju)

-k3 oznacza sortowanie na 3. polu jako klucz dodatkowy. Ponieważ nie ma innych dziedzin, nie jest konieczne określanie -k3,3, ale nie zaszkodzi też.

-t: środki ograniczają pola w linii z charakterem :, w przeciwnym razie puste stosowany jest domyślnie

Więcej informacji można znaleźć w tym SO pytanie Sorting multiple keys with Unix sort i tym sort man page

+0

Myślę, że to przerwie sortowanie pierwszego pola. Nadal musisz sortować na pierwszym, a następnie trzecim polu, nawet jeśli dane wejściowe są już posortowane na pierwszym polu. – Pat

+0

@Pat Myślę, że to zrobi - jeszcze raz dziękuję za złapanie tego .. z danymi, z którymi problem nie był dla mnie oczywisty . – Levon

+1

Pracował idealnie dobrze. Dzięki za pomoc. – user1429246

Powiązane problemy