Uniq
# Uniq

uniq (dall'inglese unique, unico o univoco) è un comando dei sistemi operativi Unix e Unix-like, e più in generale dei sistemi POSIX, che legge un file di testo (o lo standard input) e lo scrive sullo standard output (o in un file) scartando ogni linea che è identica a quella immediatamente precedente, oppure anche indicando solo le linee che sono diverse dalla linea immediatamente successiva.

Per ottenere un elenco che non contenga linee duplicate (o anche un elenco delle linee che sono duplicate) è pertanto necessario che i dati in input siano stati prima ordinati, ad esempio tramite il comando sort.

uniq è un tipo di filtro.

## Sintassi

La sintassi generale di uniq è la seguente:

Il parametro facoltativo file_input indica il nome del file da cui leggere i dati; se è omesso, oppure se è un trattino ("-"), i dati sono letti dallo standard input.

Il parametro facoltativo file_output indica il nome del file in cui scrivere il risultato; se non è specificato, il risultato è scritto sullo standard output.

Il doppio trattino -- (facoltativo) indica che i parametri successivi non sono da considerarsi opzioni.

## Opzioni

Tra le opzioni principali vi sono:

### -c

    Precede ogni linea con un conteggio del numero di volte consecutive in cui è ripetuta.

### -d

    Scarta le linee che non fanno parte di gruppi di linee identiche consecutive.

### -f num

    Nel confrontare due linee per vedere se sono identiche, scarta un numero num di campi a partire dall'inizio di ogni linea. I campi sono separati tra loro da sequenze di uno o più spazi vuoti.

### -s num

    Nel confrontare due linee per vedere se sono identiche, scarta un numero num di caratteri a partire dall'inizio di ogni linea, oppure dall'inizio del primo campo non scartato tramite l'opzione -f.

### -u

    Scarta completamente le linee che fanno parte di gruppi di linee identiche consecutive (non viene nemmeno indicata la prima)

## Uso col comando sort

uniq è tipicamente usato in abbinamento al comando sort in una pipeline software, al fine di ottenere degli elenchi privi di linee duplicate oppure per individuare le sole linee duplicate.

Il comando sort è in grado di svolgere autonomamente la rimozione di duplicati tramite l'opzione -u, tra l'altro con una maggiore flessibilità rispetto ad uniq riguardo a quali linee considerare identiche; tuttavia sort non è in grado di produrre autonomamente un elenco delle sole linee duplicate, né di conteggiare il numero di ripetizioni, ed i in questi casi occorre ancora avvalersi di uniq.

## Esempi

Per vedere la lista delle linee contenute in un file, ordinata per il numero di volte in cui esse appaiono:

sort file.txt | uniq -c | sort -n

