Vous avez la sortie de ps aux, un fichier de log Apache, ou une liste de paquets à analyser — et vous avez besoin de savoir qui apparaît le plus souvent, quelles lignes sont en double, combien il y a d’erreurs 404. Sous Linux, un pipeline de trois commandes suffit : sort pour ordonner, uniq pour dédoublonner, wc pour mesurer.
Ces outils font partie du socle Unix depuis les années 70. Ils sont présents sur tous les systèmes Linux sans installation. Leur vraie puissance est dans la composition : enchaînés, ils remplacent des scripts entiers en une seule ligne.
Vous avez vu les bases de sort, uniq et wc dans les fondamentaux. Ce guide couvre les options avancées et les patterns d’administration réels : tri sur colonne, stabilité, versions, comparaison de listes et analyse de logs.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Trier sur une colonne précise, par ordre numérique ou de version
- Identifier les doublons, les lignes uniques, les plus fréquentes
- Mesurer : lignes, mots, octets, caractères UTF-8
- Comparer deux listes triées avec
comm - Construire le pipeline
sort | uniq -c | sort -rnpour analyser n’importe quel log
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »Un incident vient de se produire. Vous avez un access.log de 500 000 lignes et vous vouloir savoir quelle IP a fait le plus de requêtes dans les 10 dernières minutes. Ou vous venez de migrer un paquet et vous voulez comparer la liste des services actifs avant et après. Ou vous auditez un système et vous cherchez les comptes utilisateurs qui apparaissent dans plusieurs fichiers à la fois. Dans ces situations, sort, uniq et comm font en 30 secondes ce qu’un script ferait en 30 lignes — et à moindre risque d’erreur. Ils sont aussi le socle de tout pipeline d’analyse de logs : dès que vous devez répondre à « combien de fois ? » ou « qui/quoi est en double ? », c’est ici que vous commencez.
sort — trier avec précision
Section intitulée « sort — trier avec précision »Rappel : tri alphabétique vs numérique
Section intitulée « Rappel : tri alphabétique vs numérique »Le piège le plus fréquent avec sort :
printf "10\n2\n20\n1\n100\n" | sort110100220Sans option, sort trie comme du texte. 10 vient avant 2 parce que 1 < 2 en ASCII.
printf "10\n2\n20\n1\n100\n" | sort -n121020100L’option -n est indispensable dès que vous triez des nombres.
Trier sur une colonne
Section intitulée « Trier sur une colonne »L’option -k choisit la colonne de tri. Par défaut, le séparateur est l’espace ou la tabulation.
# Fichier scores.txt : "nom score"sort -k2 -n scores.txtfrank 60bob 72diana 72charlie 88alice 95eve 95-k2: trier sur le deuxième champ-n: tri numérique (sans ce flag, 60, 72, 88 seraient triés comme du texte)
Pour trier par ordre décroissant :
sort -k2 -rn scores.txteve 95alice 95charlie 88diana 72bob 72frank 60Trier sur une colonne avec un délimiteur personnalisé
Section intitulée « Trier sur une colonne avec un délimiteur personnalisé »Utilisez -t pour définir le séparateur de champs :
# Trier /etc/passwd par UID (champ 3, délimiteur :)sort -t: -k3 -n /etc/passwd | head -5root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologinbin:x:2:2:bin:/bin:/usr/sbin/nologinsys:x:3:3:sys:/dev:/usr/sbin/nologinsync:x:4:65534:sync:/bin:/bin/syncC’est le même mécanisme que cut -d: — le duo sort -t: -k3 -n | cut -d: -f1,3 est très courant.
Trier et dédoublonner en une passe : -u
Section intitulée « Trier et dédoublonner en une passe : -u »sort -u est l’équivalent de sort | uniq mais en plus efficace : il trie et supprime les doublons en une seule opération.
sort -u fruits.txtapplebananacherrydateTrier des numéros de version : -V
Section intitulée « Trier des numéros de version : -V »Le tri alphabétique et le tri numérique donnent tous les deux de mauvais résultats pour des numéros de version comme v1.9, v1.10. L’option -V (version) les gère correctement :
printf "v1.10\nv1.9\nv1.2\nv2.0\n" | sort -Vv1.2v1.9v1.10v2.0Utile pour trier des tags Git, des noms de paquets ou des journaux versionnés.
Préserver l’ordre des égalités : --stable
Section intitulée « Préserver l’ordre des égalités : --stable »Quand deux lignes ont la même valeur sur le champ de tri, sort peut les réordonnancer arbitrairement. L’option --stable garantit que leur ordre d’origine est préservé :
sort -k2 -n --stable scores.txtLes lignes bob 72 et diana 72 gardent l’ordre du fichier source, ce qui compte quand vous enchaînez des tris successifs.
uniq — compter et filtrer les doublons
Section intitulée « uniq — compter et filtrer les doublons »uniq traite les répétitions consécutives. Il doit donc presque toujours être précédé de sort.
Compter les occurrences : -c
Section intitulée « Compter les occurrences : -c »sort fruits.txt | uniq -c 2 apple 3 banana 2 cherry 1 dateLe nombre à gauche est le compte d’occurrences. L’indentation variable est normale — c’est la largeur du plus grand nombre.
Trouver les éléments les plus fréquents
Section intitulée « Trouver les éléments les plus fréquents »Combinez uniq -c avec sort -rn pour obtenir un classement :
sort fruits.txt | uniq -c | sort -rn 3 banana 2 cherry 2 apple 1 dateC’est le pattern top-N — probablement le pipeline le plus utilisé en analyse de logs Linux.
Afficher uniquement les doublons : -d
Section intitulée « Afficher uniquement les doublons : -d »sort fruits.txt | uniq -dapplebananacherrySeulement les lignes qui apparaissent plus d’une fois.
Afficher uniquement les lignes uniques : -u
Section intitulée « Afficher uniquement les lignes uniques : -u »sort fruits.txt | uniq -udateSeulement les lignes qui apparaissent exactement une fois.
wc — mesurer avec précision
Section intitulée « wc — mesurer avec précision »Rappel des options de base
Section intitulée « Rappel des options de base »wc -l fichier.txt # nombre de ligneswc -w fichier.txt # nombre de motswc -c fichier.txt # nombre d'octetsCompter plusieurs fichiers d’un coup
Section intitulée « Compter plusieurs fichiers d’un coup »wc accepte plusieurs fichiers et affiche un total :
wc -l fruits.txt scores.txt access.log 8 fruits.txt 6 scores.txt 8 access.log 22 totalUtile pour auditer rapidement la taille de fichiers de configuration ou de journaux.
Octets vs caractères : -c vs -m
Section intitulée « Octets vs caractères : -c vs -m »-c compte les octets, -m compte les caractères (code points Unicode). La différence apparaît avec des caractères non-ASCII :
echo "héllo" | wc -c # → 7 (é occupe 2 octets en UTF-8 + newline)echo "héllo" | wc -m # → 6 (5 caractères + newline)En administration Linux, -c est suffisant pour vérifier la taille d’un fichier. Utilisez -m uniquement si vous travaillez avec des fichiers contenant des caractères accentués ou des scripts non-latins.
Compter des éléments filtrés
Section intitulée « Compter des éléments filtrés »wc -l à la fin d’un pipeline est une façon fiable de compter des résultats :
# Combien d'utilisateurs avec un UID >= 1000 ?awk -F: '$3 >= 1000' /etc/passwd | wc -l
# Combien de processus bob tourne en ce moment ?ps aux | grep "^bob" | wc -l
# Combien de fichiers .conf dans /etc ?find /etc -name "*.conf" | wc -lcomm — comparer deux listes triées
Section intitulée « comm — comparer deux listes triées »comm compare deux fichiers ligne par ligne et affiche trois colonnes :
- colonne 1 : lignes présentes uniquement dans le fichier 1
- colonne 2 : lignes présentes uniquement dans le fichier 2
- colonne 3 : lignes communes aux deux fichiers
# list_a.txt : apple, banana, cherry# list_b.txt : banana, cherry, date
comm <(sort list_a.txt) <(sort list_b.txt)apple banana cherry dateSélectionner une colonne avec -1, -2, -3
Section intitulée « Sélectionner une colonne avec -1, -2, -3 »Les options suppriment une colonne :
# Intersection : lignes communes aux deux (supprimer colonnes 1 et 2)comm -12 <(sort list_a.txt) <(sort list_b.txt)bananacherry# Dans A seulement (supprimer colonnes 2 et 3)comm -23 <(sort list_a.txt) <(sort list_b.txt)apple# Dans B seulement (supprimer colonnes 1 et 3)comm -13 <(sort list_a.txt) <(sort list_b.txt)dateCas d’usage : paquets installés avant/après
Section intitulée « Cas d’usage : paquets installés avant/après »# Capturer l'état avantdpkg --get-selections | awk '{print $1}' | sort > avant.txt
# ... après une opération ...
# Capturer l'état aprèsdpkg --get-selections | awk '{print $1}' | sort > apres.txt
# Paquets ajoutéscomm -13 avant.txt apres.txt
# Paquets suppriméscomm -23 avant.txt apres.txtPipelines d’administration
Section intitulée « Pipelines d’administration »Analyser les logs : top IPs
Section intitulée « Analyser les logs : top IPs »Le pattern sort | uniq -c | sort -rn s’applique à n’importe quelle colonne :
# Top IPs dans un log d'accèsawk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10 3 192.168.1.10 3 192.168.1.5 2 192.168.1.20Analyser les codes HTTP
Section intitulée « Analyser les codes HTTP »awk '{print $4}' access.log | sort | uniq -c | sort -rn 4 200 2 404 1 403 1 201Trouver les endpoints les plus appelés
Section intitulée « Trouver les endpoints les plus appelés »awk '{print $3}' access.log | sort | uniq -c | sort -rn 4 /api/users 2 /api/products 2 /api/ordersLes 5 utilisateurs avec le plus grand UID
Section intitulée « Les 5 utilisateurs avec le plus grand UID »sort -t: -k3 -n /etc/passwd | tail -5 | cut -d: -f1,3Compter les connexions SSH actives par IP
Section intitulée « Compter les connexions SSH actives par IP »ss -tn state established | awk 'NR>1 {print $5}' | cut -d: -f1 | sort | uniq -c | sort -rnDépannage
Section intitulée « Dépannage »| Problème | Cause probable | Solution |
|---|---|---|
sort : les nombres sont mal ordonnés | Tri alphabétique par défaut | Ajouter -n (numérique) ou -V (version) |
uniq ne supprime pas tous les doublons | Lignes non consécutives | Passer par sort avant uniq |
comm : avertissements “not in sorted order” | Fichiers non triés | Utiliser comm <(sort f1) <(sort f2) |
wc -l : résultat inférieur d’une unité | Dernière ligne sans \n | Normal — wc -l compte les newlines |
sort -k2 : mauvais tri sur colonne | Tri alphabétique sur la colonne | Ajouter -n si la colonne contient des nombres |
sort -u ne supprime pas tout | Casse différente (Apple vs apple) | Ajouter -f (ignore case) : sort -uf |
À retenir
Section intitulée « À retenir »sort -nest indispensable pour les nombres. Sans lui,10vient avant2.sort -k2 -ntrie sur la deuxième colonne numériquement.-t:définit le délimiteur.sort -Vtrie correctement les numéros de version (v1.9avantv1.10).sort -u=sort | uniqen une seule passe.uniq -ccompte les occurrences.uniq -dretourne les doublons.uniq -uretourne les uniques.sort | uniq -c | sort -rn | head -Nest le pipeline universel pour trouver les N éléments les plus fréquents.commexige des fichiers triés — toujours utiliser<(sort ...).wc -ccompte des octets,wc -mcompte des caractères Unicode.