# Sort (Unix)

sort è un comando dei sistemi operativi Unix e Unix-like, e più in generale dei sistemi POSIX, 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

La sintassi generale di sort è la seguente:
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

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

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 è 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
### Ordinamento alfabetico

Ordina alfabeticamente per l'intera linea:

### Ordinamento numerico con chiave

Ordina numericamente usando come chiave il secondo campo:
Ordina file e directory per dimensione decrescente (quinta colonna):