2012-08-13 18 views
12

Mam plik csv z polami rozdzielonymi przez ";". Jest 8 pól i chcę posortować dane według pierwszych 4 kolumn, w porządku rosnącym (pierwszy sortuj według kolumny 1, a następnie kolumny 2 itd.).Bash: sortuj plik csv przez pierwsze 4 kolumny

Jak mogę to zrobić z linii poleceń w systemie Linux?

Próbowałem z otwartym biurem, ale pozwala mi tylko wybrać 3 kolumny.

EDYCJA: wśród pól, w których chcę sortować moje dane, trzy pola zawierają ciągi z wartościami liczbowymi, jeden tylko ciągi. Jak mogę to określić za pomocą polecenia sort?

Odpowiedz

20

Spróbuj:

sort -t\; -k 1,1n -k 2,2n -k 3,3n -k 4,4n test.txt 

np

1;2;100;4 
1;2;3;4 
10;1;2;3 
9;1;2;3 

> sort -t\; -k 1,1n -k 2,2n -k 3,3n -k 4,4n temp3 
1;2;3;4 
1;2;100;4 
9;1;2;3 
10;1;2;3 
+0

Dziękuję. Jakie jest znaczenie słowa "1,1n" tutaj? –

+0

Sortowanie według numerycznej – Vijay

+0

Oh ok. Powiedzmy, że pole 3 zawiera ciągi, zrobię "-k 3,3d", aby posortować według kolejności słownikowej, prawda? –

8

sort -k pozwoli ci zdefiniować klucz sortowania. Od man sort:

-k, --key=POS1[,POS2] 
     start a key at POS1 (origin 1), end it at POS2 (default end of line). 

So

$ sort -t\; -k1,4 

powinno wystarczyć. Zauważ, że udało mi się uciec przed średnikiem, w przeciwnym razie powłoka zinterpretuje to jako koniec instrukcji.

+0

Dzięki. Czy "sortowanie" pozwala również określić dla każdego pola czy chcę sortować numerycznie czy alfabetycznie? (zobacz moją ostatnią edycję) –

Powiązane problemy