sort (Unix)
sort è un comando dei sistemi operativi Unix e Unix-like, e più in generale dei sistemi POSIX[1], che legge uno o più file di testo (o lo standard input) e ne ordina le linee alfabeticamente oppure secondo il criterio specificato, producendo il risultato sullo standard output o su di un file. È un tipo di filtro.
sort può anche verificare che le linee lette siano già ordinate secondo un certo criterio. In questo caso non produce risultati, ed il suo valore di uscita è pari a 0
se i dati risultano essere già ordinati, o maggiore di 0
se essi non lo sono.
sort può rimuovere direttamente le linee duplicate analogamente al comando uniq.
Sintassi
[modifica | modifica wikitesto]La sintassi generale di sort è la seguente:
sort [opzioni] [--] [file1 [file2 …] ]
I parametri facoltativi file indicano i file di testo da cui leggere le linee da ordinare. Se sono specificati più file essi sono ordinati individualmente, per poi unirne le linee in modo che il risultato finale sia a sua volta ordinato. Se non è specificato alcun file, le linee da ordinare sono lette dallo standard input.
Il doppio trattino --
(facoltativo) indica che i parametri successivi non sono da considerarsi opzioni.
Opzioni
[modifica | modifica wikitesto]Tra le opzioni principali vi sono:
-c
- Verifica che le linee lette siano già ordinate secondo il criterio specificato. In questo caso il comando non produce messaggi, ed il valore di uscita è pari a
0
se i dati risultano essere già ordinati, o diverso da0
se essi non lo sono. -m
- Assume che i file specificati siano già ordinati, e procede ad unirne le linee.
-o nome_file
- Scrive il risultato nel file indicato invece che sullo standard output.
-u
- Elimina dal risultato le linee duplicate (analogamente a quanto fatto dal comando uniq).
-f
- Non distingue tra caratteri maiuscoli e minuscoli.
-r
- Inverte il senso di ordinamento, producendo i risultati a partire dal valore maggiore.
-n
- Ordina numericamente invece che alfabeticamente.
-i
- Ignora i caratteri non stampabili.
-k chiave_di_ordinamento
- Indica una porzione della linea da usare come chiave per l'ordinamento. È possibile specificare questa opzione più volte per definire più chiavi di ordinamento da usare in cascata.
-t carattere
- Specifica il carattere da usare come separatore di campo (invece del valore predefinito) in caso di definizione di chiavi di ordinamento.
La versione GNU di sort offre tra le altre anche le seguenti opzioni:
-g
- Ordina numericamente accettando anche i numeri riconosciuti dalla funzione della libreria standard del linguaggio C
strtod()
(ad es. numeri espressi in notazione scientifica). -s
- Effettua un ordinamento stabile (a parità di chiavi di ordinamento conserva l'ordine originario delle linee).
Chiavi di ordinamento
[modifica | modifica wikitesto]Tramite l'opzione -k
è possibile definire una chiave di ordinamento su una porzione della linea. Specificando più opzioni -k
è possibile definire più chiavi di ordinamento da usare in cascata.
La sintassi di una chiave di ordinamento è la seguente:
numero_campo_iniziale[.indice_primo_carattere][tipo][,numero_campo_finale[.indice_ultimo_carattere][tipo]]
numero_campo_iniziale è un valore numerico che indica il numero del campo (partendo da 1
) da includere nella chiave, e indice_primo_carattere è l'indice del primo carattere all'interno del campo che va preso in considerazione (partendo da 1
).
Analogamente, numero_campo_finale, se specificato, indica l'ultimo campo da includere nella chiave, e indice_ultimo_carattere è l'indice dell'ultimo carattere di detto campo.
Entrambi possono essere seguiti da tipo, che è un carattere che specifica il tipo di ordinamento da effettuare per il particolare campo (ad es. n
per indicare un ordinamento numerico, f
per indicare di non tenere conto della differenza tra maiuscole e minuscole, r
per invertire l'ordinamento).
La divisione di una linea in campi è operata in base al carattere separatore specificato con l'opzione -t
. In sua assenza viene considerato come separatore una qualsiasi sequenza di spazi.
Esempi
[modifica | modifica wikitesto]Ordinamento alfabetico
[modifica | modifica wikitesto]Ordina alfabeticamente per l'intera linea:
$ cat esempio.txt Gianni 200 Alice 30 Carlo 100 Bruno 5 $ sort esempio.txt Alice 30 Bruno 5 Carlo 100 Gianni 200
Ordinamento numerico con chiave
[modifica | modifica wikitesto]Ordina numericamente usando come chiave il secondo campo:
$ cat esempio.txt Gianni 200 Alice 30 Carlo 100 Bruno 5 $ sort -k 2 -n esempio.txt Bruno 5 Alice 30 Carlo 100 Gianni 200
Ordina file e directory per dimensione decrescente (quinta colonna):
$ ls -l | sort -n -r -k 5 -rw-r--r-- 1 root root 1057 1 mar 20:12 ring+star -rw-r--r-- 1 root root 727 1 mar 20:12 A_star -rw-r--r-- 1 root root 535 1 mar 20:12 star2 -rw-r--r-- 1 root root 505 1 mar 20:12 spirals_and_stars -rw-r--r-- 1 root root 503 1 mar 20:12 curves -rw-r--r-- 1 root root 475 1 mar 20:12 simily -rw-r--r-- 1 root root 458 1 mar 20:12 ring -rw-r--r-- 1 root root 415 1 mar 20:12 stars -rw-r--r-- 1 root root 387 1 mar 20:12 sprial -rw-r--r-- 1 root root 377 1 mar 20:12 polys
Note
[modifica | modifica wikitesto]Voci correlate
[modifica | modifica wikitesto]- algoritmo di ordinamento
- uniq – Rimuove le linee duplicate in un file ordinato.
Collegamenti esterni
[modifica | modifica wikitesto]- (EN) sort: Sort text files [collegamento interrotto], su GNU Texutils manual. URL consultato il 20 maggio 2008.
- (EN) sort, su Linux Man Pages. URL consultato il 21 maggio 2008.
- (EN) sort(1), su Solaris 10 Reference Manual Collection - man pages. URL consultato il 21 maggio 2008.