uniq în Linux / Bash

Procesare și filtrare text POSIX / GNU Coreutils

Raportează sau elimină liniile duplicate consecutive dintr-un flux de text.

Sintaxă comandă
uniq [opțiuni] [intrare [ieșire]]

Ce face uniq

Comanda uniq parcurge textul și filtrează rândurile identice adiacente (aflate una după alta).

Pentru a deduplica un întreg fișier, este aproape întotdeauna necesar să sortezi fișierul mai întâi cu sort, direcționând ieșirea către uniq prin sort | uniq.

Opțiuni și argumente

Opțiune / Parametru Descriere
-c, --count Prefixează fiecare linie cu numărul de apariții consecutive.
-d, --repeated Afișează doar liniile care sunt duplicate.
-u, --unique Afișează doar liniile care apar o singură dată (fără nicio dublură).
-i, --ignore-case Ignoră diferențele dintre majuscule și minuscule la comparare.

Exemple

Exemplul 1: Numărarea frecvenței de apariție

Sortăm datele și contorizăm aparițiile fiecărui element cu sort | uniq -c.

cat << 'EOF' > vizite.txt
Bucuresti
Iasi
Bucuresti
Cluj
Bucuresti
Iasi
EOF
sort vizite.txt | uniq -c | awk '{print $2, "aparitii:", $1}'

Rezultat

Bucuresti aparitii: 3
Cluj aparitii: 1
Iasi aparitii: 2

Greșeli frecvente

  • Apelarea lui uniq pe un fișier nesortat, presupunând că elimină dublurile aflate la distanță una de alta.

Comenzi înrudite

  • sort: Sortează liniile de text în ordine alfabetică, numerică sau după o coloană specifică.
  • wc: Contorizează numărul de linii, cuvinte și octeți dintr-un fișier sau flux de date.