Ho un file (user.csv) come questo
ip,hostname,user,group,encryption,aduser,adattr
vuoi stampare tutte le colonne ordinate per utente,
Ho provato awk -F ":" '{print|"$3 sort -n"}' user.csv
, non funziona.
Ho un file (user.csv) come questo
ip,hostname,user,group,encryption,aduser,adattr
vuoi stampare tutte le colonne ordinate per utente,
Ho provato awk -F ":" '{print|"$3 sort -n"}' user.csv
, non funziona.
Risposte:
Che ne dici di appena sort
.
sort -t, -nk3 user.csv
dove
-t,
- definisce il delimitatore come ,
.
-n
- ti dà l'ordinamento numerico. Aggiunto da quando l'hai aggiunto nel tuo tentativo. Se il campo utente è solo testo, non ne hai bisogno.
-k3
- definisce il campo (chiave). utente è il terzo campo.
sort -t, -nk3 filename.csv | sort -t, -nk6
- prima ordinerà per colonna 3, poi lo ordinerà per colonna 6 in modo che la colonna 6 sia ordinata correttamente fino in fondo e per tutte le righe in cui la colonna 6 è la stessa, quelle saranno ordinate per colonna 3 .
sort -t ',' -k3,3n -k6,6n
andrà meglio. -k3
utilizzerà la colonna 3 e il resto della riga.
Utilizzare sed per rimuovere l'ID utente duplicato, supponendo che gli ID utente non contengano spazi.
awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //'
sort
sa già come ordinare in base a una particolare colonna, ma questa tecnica, nota come trasformata di Schwartz , è utile quando il campo su cui si desidera ordinare non è banalmente una colonna ben definita.
Puoi scegliere un delimitatore, in questo caso ho scelto i due punti e ho stampato la colonna numero uno, ordinando in ordine alfabetico:
awk -F\: '{print $1|"sort -u"}' /etc/passwd
prova questo -
awk '{print $0|"sort -t',' -nk3 "}' user.csv
O
sort -t',' -nk3 user.csv
awk -F "," '{print $0}' user.csv | sort -nk3 -t ','
Questo dovrebbe funzionare
sort -t, -k3 file