Oggi parliamo di un comando che serve a mettere in ordine le cose: non nel senso di riordinare il vostro casino, ma di ordinare alfabeticamente o numericamente. Si chiama, indovinate un po’, sort.
Ordinare un file
Partiamo da una lista di nomi, per esempio il file lista, con un nome, un cognome e un numero di telefono interno per riga, in ordine sparso. Attenzione: se l’ultima riga del file non finisce con un a capo, il prompt comparirà subito dopo l’ultima riga. In quel caso aggiungiamo un newline in fondo:
echo >> lista
Per ordinarla alfabeticamente passiamo il contenuto del file a sort:
cat lista | sort
Il file non è stato modificato: sort ordina l’output di cat, non il file. Se rilanciamo cat senza sort, la lista è ancora disordinata. (Sort può leggere direttamente il file, sort lista, ma la pipe ci serve per gli esempi che seguono.)
Ordinare per cognome
Combiniamo sort con qualcosa che già conosciamo. Se il cognome sta nella seconda colonna e vogliamo ordinare per cognome, possiamo riordinare le colonne con awk e poi passare tutto a sort. Qui stampiamo cognome, nome e numero interno, separati da tabulazioni:
cat lista | awk '{print $2 "\t" $1 "\t" $3}' | sort
Visto che il cognome ora è nella prima colonna, l’output risulta ordinato per cognome. Notate quante cose abbiamo concatenato con le pipe: cat, awk e sort. Se non ricordate come funziona awk, c’è la puntata apposta.
Ordine inverso E ordine casuale
L’opzione -r fa l’ordinamento inverso: prima le lettere più avanti nell’alfabeto.
cat lista | sort -r
Da non confondere con la -R maiuscola, che fa un’altra cosa divertente e a volte utile: ordina in modo casuale. Ogni volta che la lanciate, la lista viene rimescolata. Comodo, per esempio, se dovete interrogare qualcuno e volete decidere chi è in cima alla lista.
cat lista | sort -R
L’ordinamento umano
sort ha diverse altre opzioni per ragionare in modo diverso su maiuscole, minuscole e numeri, ma quella che trovo più utile è l’ordinamento umano, cioè come lo farebbe una persona. Per spiegarlo uso il comando du, che dice quanto spazio occupano file e cartelle (ci faremo un video a parte: per ora è la nostra cavia). Con questo comando otteniamo la dimensione di tutte le cartelle nella cartella corrente, in blocchi:
du -s *
L’opzione -s somma il contenuto di ogni cartella, e l’opzione -h rende le dimensioni leggibili, con le unità: 4K, 500M, 3G e così via.
du -sh *
Ora proviamo a ordinare questo elenco senza dare altre indicazioni a sort:
du -sh * | sort
Il risultato è sbagliato: la cartella da 3 GB finisce a metà, tra una da 251M e una da 4K. Sort sta facendo un puro ordinamento alfabetico, guarda i caratteri e non il significato delle unità. Per ottenere l’ordinamento umano si usa l’opzione -h:
du -sh * | sort -h
Adesso la cartella da 3 GB sta dove deve stare, cioè all’ultimo posto. E ovviamente si può invertire, per partire dalla cartella più grande:
du -sh * | sort -rh
Per finire
Anche un comando semplice come sort nasconde diversi trucchi. Provate le varie opzioni e leggete la man page: è un comando veramente utile.
man sort
Link e risorse
- il video su YouTube
- esempi e comandi della puntata su GitHub
- sort(1), pagina di manuale — il manuale completo
- sort(1) in italiano — in italiano
Sostieni il canale
PER SOSTENERE IL CANALE BASTANO UN LIKE E UN’ISCRIZIONE!
questi link sono affiliati Amazon, acquistando i libri che ti consiglio sostieni il canale!
