sort (Unix)

comando dei sistemi operativi Unix e Unix-like

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 --help

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

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

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 da 0 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

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.

Ordinamento alfabetico

modifica

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

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
  1. ^ (EN) sort, su The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition. URL consultato il 20 maggio 2008.

Voci correlate

modifica

Collegamenti esterni

modifica
  • (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.
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica