Quando si ha a che fare con un file che ha un gran numero di voci, l’ordinamento dei contenuti in un certo ordine può rendere le cose molto più semplici. In Linux, il comando sort, che utilizza l’algoritmo merge sort, viene utilizzato per questo scopo.
Il comando sort confronta tutte le righe dei file specificati e le ordina nell’ordine specificato in base alle chiavi di ordinamento. L’opzione -k, in particolare, viene utilizzata per ordinare su una determinata colonna.
In combinazione con l’opzione -k, dovrai anche conoscere altre opzioni come -n o -r per ordinare in modo efficiente per colonna. Abbiamo dettagliato questi e altri argomenti correlati nelle sezioni seguenti.
Se volete continuare a leggere questo post su "[page_title]" cliccate sul pulsante "Mostra tutti" e potrete leggere il resto del contenuto gratuitamente. ebstomasborba.pt è un sito specializzato in Tecnologia, Notizie, Giochi e molti altri argomenti che potrebbero interessarvi. Se desiderate leggere altre informazioni simili a [page_title], continuate a navigare sul web e iscrivetevi alle notifiche del blog per non perdere le ultime novità.
Sommario
Ordina per colonna
La sintassi di base per il comando sort è sort
. Per applicare questo, iniziamo con un esempio. Supponiamo di avere un file contacts.txt
con le seguenti voci:
Emma Smith US 51Edward Dyer UK 19Natalie Russell Canada 22Mathew Roberts Germany 21Ruth Abraham Australia 44Joseph Smith France 25
Il semplice utilizzo del comando sort contacts
ordinerebbe le voci in ordine alfabetico in base alla prima colonna. Per ordinare in base a un’altra colonna specifica o in un altro ordine, dovrai utilizzare varie opzioni, che abbiamo elencato di seguito.
Opzione -k
Come affermato, l’opzione --key
o -k
viene utilizzata per ordinare su una colonna o un campo specifico. Ad esempio, nel nostro esempio, se volessi ordinare per nazionalità, useresti il seguente comando per ordinare sulla terza colonna:
sort -k3 contacts
Questo comando prenderà in considerazione tutti i campi da 3 alla fine della riga. In alternativa, se hai usato sort -k3,4 contacts
, questo specificherebbe di usare i campi da #3 a #4, cioè dal terzo al quarto campo.
Se stavi cercando di ordinare per cognomi nella seconda colonna, ci sono due scenari da considerare. Poiché ci sono voci identiche (Smith), sort utilizzerà la voce successiva per il tie-break. Cioè, nel caso dei due fabbri, la Francia verrebbe classificata al di sopra degli Stati Uniti.
Ma cosa succede se hai bisogno di ordinare per cognome, nome e solo allora nazionalità? In questi casi, puoi manipolare l’ordinamento specificando le chiavi più volte come segue:
sort -k2,2 -k1,1 contacts
Opzione -n
Se utilizzi i comandi mostrati sopra per ordinare per età nella quarta colonna, i risultati sembrerebbero imprecisi. Poiché l’ordinamento adotta un approccio lessicografico, cinquantuno si collocherebbe sopra il diciannove.
Per ordinare una colonna in base ai numeri, devi invece specificare l’opzione -n come tale:
sort -n -k4 contacts
Opzione -r
Se stavi cercando di ordinare le voci in ordine inverso, dovresti usare l’opzione -r. Questo vale sia per i valori alfabetici che numerici, come mostrato di seguito:
sort -r -k1,1 contacts
sort -r -k3,4 contacts
Combinando le opzioni di base che abbiamo elencato finora, puoi eseguire complesse operazioni di ordinamento come l’ordinamento inverso sulla seconda colonna e l’ordinamento numerico sulla quarta colonna contemporaneamente:
sort -k2,2r -k4,4n contacts
Opzione -t
Uno spazio vuoto è il separatore di campo predefinito, ovvero il delimitatore con ordinamento. Ma i file CSV usano le virgole ( , ) per separare i valori. A seconda del delimitatore utilizzato, è possibile specificarlo utilizzando l’opzione -t. Ad esempio, se : è il delimitatore, dovresti specificarlo come tale:
sort -t ':' -k2 contact
Opzione -o
È possibile utilizzare l’opzione -o per salvare l’output ordinato in un file specificato come tale:
sort -k2 contacts -o sortedcontacts
Opzioni aggiuntive
Le opzioni sopra descritte sono quelle più comunemente utilizzate. Ma sort ha innumerevoli altri flag che potrebbero essere utili in scenari di nicchia come -b
per ignorare gli spazi vuoti all’inizio del file, -M
per ordinare i contenuti in base al mese di calendario o -c
per verificare se i dati sono già ordinati. Poiché ce ne sono troppi da elencare qui, si consiglia di fare riferimento alla pagina man di sort per l’elenco completo di tali opzioni.