2013-08-12 12 views
22

Proszę nie sądzić, że jest to powtórzenie pytania "Sortowanie alfanumerycznych danych w unixie" ... Przyjrzałem się innym odpowiedziom i uważam, że moja sprawa jest trochę inna!Jak sortować pliki w unixie alfabetycznie i numerycznie na różnych polach?

mam danych tak:

A 192 
D 112 
D 188 
C 091 
A 281 
B 919 

... I chcę uporządkować pierwszą kolumnę 1 (alfabetycznie), a następnie przez kolumnie 2 (numerycznie). Próbowałem za pomocą:

sort -n -k1,2 

... Ale to dało mi poprawnie posortowane dla pierwszego pola, ale wtedy źle sortowania dla drugiego pola (1000,1002,1003,10,1 ... zamiast 1 10,1000,1002,1003).

Czy ktoś może zasugerować, jak posortować te dwie kolumny tak, jak chciałbym?

+0

rodzaj -k4,4n -k1,1 ???? –

+0

Należy wspomnieć, że obie kolumny mogą mieć od 1 do 50 znaków na ich ciąg, a każda linia jest inna. – jake9115

+0

"sort -k1 -nk3 file" powinno działać. – anubhava

Odpowiedz

28

Spróbuj użyć takiego: -

sort -k1,1 -k4,4n 
  • -n: Sprawia, że ​​program sortowania według wartości liczbowej
  • -k zdecyduje: sortowanie danych/dziedzinach wykorzystujących daną liczbę kolumn. Na przykład opcja -k 2 spowodowała sortowanie programu przy użyciu drugiej kolumny danych. Opcja -k 3,3n -k 4,4n sortuje każdą kolumnę. Najpierw
    będzie sortować 3 kolumnę, a następnie 4 kolumnę.
+0

Dzięki za polecenie/odpowiedź! Próbowałem tego i widzę, dokąd zmierzasz, ale to nie działa dla moich danych, ponieważ wartości w każdej kolumnie nie są ustaloną długością. W moim przykładzie użyłem długości znaku 1 dla kolumny 1 i 3 dla kolumny 2, ale w rzeczywistości długość znaku wynosi od 1 do 50, w zależności od linii. Czy istnieje sposób na obejście tego? – jake9115

+0

Odwróciłem polecenie, aby posortować najpierw kolumnę 2, a następnie kolumnę 1: "sort-k1-1 -4,4" i wydaje się, że to działa. Czy możesz wyjaśnić, jak działa polecenie? Nie jestem zaznajomiony z '-k4,4n' – jake9115

+0

@ jake9115: - Zaktualizowano moją odpowiedź z objaśnieniem obu. Nadzieję, że pomaga :) P.S. Nie zapomnij przyjąć tej odpowiedzi, jeśli to naprawdę ci pomogło;) –

6

To powinno działać:

sort -t "," -k1,1 -k2n,2 file 
Powiązane problemy