-n- umożliwia sortowanie numeryczne. Dodano, ponieważ dodałeś go w swojej próbie. Jeśli twoje pole użytkownika jest tylko tekstowe, nie potrzebujesz go.
Jak mogę użyć sortowania 2 kolumn? na przykład chcę najpierw sortować według kolumny 6, a sortować według kolumny 3 sekundy.
user2452340
1
To nie zadziała, jeśli w pliku CSV znajdują się cytowane ciągi zawierające przecinki (chyba że kolumna, według której chcesz sortować, jest wcześniejsza niż kolumna zawierająca przecinki). Być może będziesz musiał najpierw wykonać przebieg za pomocą awk (używając FPAT = "[^,] * | \" [^ \ "] * \" "i OFS =" | "lub innego separatora, którego możesz użyć z sortowaniem)
davemyron
1
@ user2452340 Możesz to zrobić: sort -t, -nk3 filename.csv | sort -t, -nk6- najpierw posortuje według kolumny 3, a następnie posortuje to według kolumny 6, aby kolumna 6 była poprawnie posortowana w całości i dla wszystkich wierszy, w których kolumna 6 jest taka sama, zostaną posortowane według kolumny 3 .
Jest to bardzo przydatne, zwłaszcza jeśli musisz przeanalizować lub połączyć kolumny, aby dodać pole sortowania, a następnie zachować tylko oryginalną linię. Użyłem awk / split, aby przeanalizować / połączyć pola daty i czasu w celu sortowania, a następnie usunąć.
skytaker
1
sortjuż wie, jak sortować według określonej kolumny, ale ta technika - znana jako transformata Schwartziana - jest przydatna, gdy pole, według którego chcesz sortować, nie jest w trywialnym przypadku dobrze zdefiniowaną kolumną.
tripleee
10
Możesz wybrać separator, w tym przypadku wybrałem dwukropek i wydrukowałem kolumnę numer jeden, sortując w kolejności alfabetycznej:
sort -t, -k3 file
Odpowiedzi:
Może po prostu
sort
.sort -t, -nk3 user.csv
gdzie
-t,
- definiuje twój separator jako,
.-n
- umożliwia sortowanie numeryczne. Dodano, ponieważ dodałeś go w swojej próbie. Jeśli twoje pole użytkownika jest tylko tekstowe, nie potrzebujesz go.-k3
- określa pole (klucz). user to trzecie pole.źródło
sort -t, -nk3 filename.csv | sort -t, -nk6
- najpierw posortuje według kolumny 3, a następnie posortuje to według kolumny 6, aby kolumna 6 była poprawnie posortowana w całości i dla wszystkich wierszy, w których kolumna 6 jest taka sama, zostaną posortowane według kolumny 3 .sort -t ',' -k3,3n -k6,6n
będzie lepszy.-k3
użyje kolumny 3 i reszty wiersza.Użyj seda, 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/^.* //'
źródło
sort
już wie, jak sortować według określonej kolumny, ale ta technika - znana jako transformata Schwartziana - jest przydatna, gdy pole, według którego chcesz sortować, nie jest w trywialnym przypadku dobrze zdefiniowaną kolumną.Możesz wybrać separator, w tym przypadku wybrałem dwukropek i wydrukowałem kolumnę numer jeden, sortując w kolejności alfabetycznej:
awk -F\: '{print $1|"sort -u"}' /etc/passwd
źródło
awk -F, '{ print $3, $0 }' user.csv | sort -nk2
i dla odwrotnej kolejności
awk -F, '{ print $3, $0 }' user.csv | sort -nrk2
źródło
Spróbuj tego -
awk '{print $0|"sort -t',' -nk3 "}' user.csv
LUB
sort -t',' -nk3 user.csv
źródło
awk -F "," '{print $0}' user.csv | sort -nk3 -t ','
To powinno działać
źródło
Aby wykluczyć pierwszą linię (nagłówek) z sortowania, podzieliłem ją na dwa bufory.
df | awk 'BEGIN{header=""; $body=""} { if(NR==1){header=$0}else{body=body"\n"$0}} END{print header; print body|"sort -nk3"}'
źródło