2013-06-11 8 views
45

Mam plik (user.csv), tak jak toJak używać awk sortowanie wg kolumny 3

ip,hostname,user,group,encryption,aduser,adattr 

chcesz wydrukować wszystkie kolumny sortowania przez użytkownika,

próbowałem awk -F ":" '{print|"$3 sort -n"}' user.csv, nie robi praca.

+6

'sort -t, -k3 file' – Kevin

Odpowiedz

88

A może po prostu sort.

sort -t, -nk3 user.csv 

gdzie

  • -t, - określa swój ogranicznik jako ,.

  • -n - daje sortowanie numeryczne. Dodano od czasu dodania go w próbie . Jeśli twoje pole użytkownika jest tylko tekstowe, nie potrzebujesz go.

  • -k3 - określa pole (klucz). użytkownik jest trzecim polem.

+0

Jak mogę użyć sortowania 2 kolumny? na przykład chcę najpierw sortować według kolumny 6 i sortować według kolumny 3 sekundy. – user2452340

+0

To nie zadziała, jeśli w CSV znajdują się cudzysłowy zawierające przecinki (chyba że kolumna, którą chcesz posortować, jest wcześniejsza niż kolumna zawierająca przecinki). Być może będziesz musiał najpierw przejść z awk (używając FPAT = "[^,] * | \" [^ \ "] * \" "i OFS =" | "lub innego ogranicznika, którego możesz użyć do sortowania) – davemyron

+1

@ user2452340 Możesz to zrobić: 'sort -t, -nk3 filename.csv | sort -t, -nk6' - najpierw sortuje według kolumny 3, następnie sortuje je według kolumny 6, więc kolumna 6 jest poprawnie posortowana do końca a dla każdego wiersza, w którym kolumna 6 jest taka sama, zostaną one posortowane według kolumny 3. – Matthew

9
  1. Zastosowanie awk umieścić identyfikator użytkownika w przód.
  2. Sortuj
  3. Użyj sed, aby usunąć zduplikowany identyfikator użytkownika, zakładając, że identyfikatory użytkowników nie zawierają spacji.

    awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //' 
    
+0

Jest to bardzo użyteczne, szczególnie jeśli chcesz parsować lub łączyć kolumny, aby dodać pole sortowania, a następnie zachować tylko oryginalną linię. Użyłem awk/split do analizy/łączenia pól daty i czasu dla sortuj, a następnie usuń: – bejota

2
awk -F, '{ print $3, $0 }' user.csv | sort -nk2 

i odwrotnej kolejności

awk -F, '{ print $3, $0 }' user.csv | sort -nrk2 
3

można wybrać separator, w tym przypadku wyboru dwukropek i wydrukować jeden numer kolumny, sortowania według kolejności alfabetycznej.

awk -f\: '{print $1|"sort -u"}' /etc/passwd 
+0

jego -F nie -f, ale dobrze –

4

spróbować -

awk '{print $0|"sort -t',' -nk3 "}' user.csv 

LUB

sort -t',' -nk3 user.csv 
Powiązane problemy