Compter les lignes uniques dans un fichier est une tâche courante sous Linux. Cet article présente deux méthodes efficaces en ligne de commande : l’utilisation de sort
et uniq
, et l’utilisation de awk
.
Table des matières
Compter les lignes uniques avec sort
et uniq
Cette méthode combine la puissance de sort
et uniq
pour une approche simple. sort
trie les lignes alphabétiquement, une condition préalable pour uniq
, qui ne compte que les lignes identiques consécutives. L’option -c
dans uniq
ajoute un préfixe de compte à chaque ligne.
Pour compter les lignes uniques dans file.txt
:
sort file.txt | uniq -c
Ceci affiche chaque ligne unique avec son nombre. Pour obtenir le nombre total de lignes uniques, il suffit de diriger la sortie vers wc -l
:
sort file.txt | uniq -c | wc -l
Exemple :
Si file.txt
contient :
apple
banana
apple
orange
banana
apple
sort file.txt | uniq -c
affiche :
3 apple
2 banana
1 orange
Et sort file.txt | uniq -c | wc -l
affiche :
3
Compter les lignes uniques avec awk
awk
offre une solution flexible, particulièrement utile pour des scénarios plus complexes. Cette méthode utilise un tableau associatif pour suivre les lignes uniques et leurs nombres.
Pour compter les lignes uniques et les afficher avec leurs nombres :
awk '{count[$0]++} END {for (line in count) print count[line], line}' file.txt
Ce script incrémente le nombre pour chaque ligne dans le tableau count
, en utilisant la ligne comme clé. Le bloc END
itère sur le tableau, affichant le nombre de chaque ligne et la ligne elle-même.
Pour obtenir uniquement le nombre total de lignes uniques :
awk '{count[$0]++} END {print length(count)}' file.txt
Ceci utilise length(count)
pour afficher directement le nombre de lignes uniques (la taille du tableau).
Exemple :
En utilisant le même fichier file.txt
, la première commande awk
produit la même sortie que la méthode sort | uniq -c
. La seconde commande awk
affiche 3
, indiquant trois lignes uniques.
Choisissez la méthode qui convient le mieux à vos besoins. sort
et uniq
sont plus simples pour les tâches de base ; awk
offre une plus grande flexibilité pour les scénarios complexes.