# Cut (Unix)

cut (dalla lingua inglese cut, taglia) è 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) estraendo da ogni linea delle sezioni, definite in termini di byte oppure caratteri oppure campi, le quali sono poi mostrate sullo standard output. È un tipo di filtro.

## Sintassi

La sintassi generale di cut prevede le tre forme che seguono:
I parametri facoltativi file indicano i nomi dei file di testo da cui estrarre le informazioni. Se non sono specificati, i dati sono letti dallo standard input. Uno dei parametri può essere un trattino ("-") per indicare di leggere in quel punto lo standard input.
Il doppio trattino -- (facoltativo) indica che i parametri successivi non sono da considerarsi opzioni.
Tra le opzioni principali vi sono:

### -b lista

    Estrae dalla linea i byte i cui indici sono specificati dal parametro lista.

### -c lista

    Estrae dalla linea i caratteri i cui indici sono specificati dal parametro lista.

### -f lista

    Estrae dalla linea i campi i cui indici sono specificati dal parametro lista.

### -d carattere

    Se si estraggono campi tramite l'opzione -f, indica il carattere da usare come separatore tra i campi. Il carattere predefinito è il carattere di controllo tab.

### -n

    Se si estraggono byte tramite l'opzione -b e la codifica del testo in uso richiede più byte per carattere, assicura che le sequenze di byte che rappresentano il primo e/o l'ultimo carattere di una sezione siano estratte per intero.

### -s

    Se si estraggono campi tramite l'opzione -f, indica di escludere le linee che non contengono il carattere separatore (il comportamento predefinito di cut prevede di riproporre in output tali linee senza modifiche).
Il parametro lista delle opzioni -b, -c e -f è un elenco di uno o più indici e/o intervalli di indici, separato da virgole (",") o da spazi (" "), il quale seleziona all'interno delle linee di dati le sezioni da estrarre. Ciascun elemento dell'elenco può essere:
* un indice numerico, a partire da 1, che indica il byte, carattere o campo da selezionare;
* un intervallo di indici nella forma min-max (ad esempio "3-5") che seleziona i byte, caratteri o campi compresi tra gli indici min e max;
* un intervallo di indici nella forma min- (ad esempio "3-") che seleziona i byte, caratteri o campi a partire dall'indice min fino al termine della linea;
* un intervallo di indici nella forma -max (ad esempio "-5") che seleziona i byte, caratteri o campi a partire dall'inizio della linea fino all'indice max;
L'ordine degli elementi nella lista non è rilevante, e nemmeno lo sono eventuali ripetizioni o intersezioni, in quanto le sezioni sono sempre presentate nell'ordine in cui appaiono nelle linee di dati originarie e senza ripetizioni.

## Esempi

Estrae il primo ed il sesto campo dal file /etc/passwd, che usa il carattere : come separatore di campo:
Estrae i primi dieci caratteri da ogni linea che giunge dallo standard input:
Estrae i byte che vanno dal quinto al decimo, il sedicesimo e dal ventesimo in poi di ogni linea del file prova.txt:

## Alternative

Le capacità di estrazione di cut sono alquanto ridotte, il che limita il suo utilizzo ai casi più semplici; esso infatti:
* non permette di riordinare e/o ripetere le sezioni estratte;
* non permette di estrarre solo parte dei dati delle sezioni indicate;
* non permette di specificare come separatore dei campi una sequenza di spazi (non è ad esempio adatto a estrarre dati dall'output del comando ls).
Se ciò fosse necessario, si può ricorrere a degli script nel linguaggio AWK o all'uso del comando sed, che offrono maggiori possibilità in tal senso.