objectif
Compter les occurrences, supprimer les doublons et extraire les éléments les plus fréquents à partir d’un flux de lignes (logs, emails, IP).
code minimal
# top 10 des lignes les plus fréquentes
sort | uniq -c | sort -nr | head -n 10
utilisation
# supprimer les doublons d'un fichier (résultat sur stdout)
sort -u emails.txt > emails_uniq.txt
# dédupliquer "in place" de manière sûre (sort crée un tmp puis remplace)
sort -u -o emails.txt emails.txt
# top 10 des IP les plus actives dans un access.log (colonne 1)
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10
# comptage insensible à la casse (normaliser en minuscules)
tr '[:upper:]' '[:lower:]' < tags.txt | sort | uniq -c | sort -nr
# ne lister que les doublons (une fois chacun)
sort noms.txt | uniq -d
# ne lister que les lignes uniques (apparaissant une seule fois)
sort noms.txt | uniq -u
# compter précisément le nombre de lignes distinctes
sort -u data.txt | wc -l
variante(s) utile(s)
# accélérer fortement sur ASCII pur (logs, IDs)
LC_ALL=C sort | uniq -c | sort -nr
# intersection de deux fichiers (lignes communes, uniques)
comm -12 <(sort -u a.txt) <(sort -u b.txt)
# différence: lignes dans a.txt mais pas dans b.txt
comm -23 <(sort -u a.txt) <(sort -u b.txt)
# comparer sans tenir compte des espaces en fin/début
sed 's/^[[:space:]]\+//; s/[[:space:]]\+$//' data.txt | sort | uniq -c | sort -nr
# trier numériquement par la 3e colonne (ex: "clé valeur 42")
sort -k3,3n fichier.txt | uniq
notes
uniqne détecte les doublons que si les lignes identiques sont adjacentes, d’où l’usage desorten amont.sort -ucombine tri et déduplication plus efficacement quesort | uniq.- préférez
LC_ALL=Cpour des jeux de caractères ASCII (plus rapide et déterministe). commattend des entrées triées; les redirections de processus<( ... )nécessitent Bash. Sur shells sans cette feature, utilisez des fichiers temporaires.