Trier les lignes en double avec la commande uniq sous Linux

I. Présentation de la commande uniq

Il y a quelques jours je vous présentais la commande "sort" qui permet d'effectuer des tris sur des entrées en ligne de commande Linux. Aujourd'hui je vais vous présenter une commande tout aussi utile qui permet de trier, d'afficher ou d'omettre dans l'affichage les lignes en doublons (ou plus). Certains contextes de travail (script ou gestion des logs par exemple) requièrent d'exclure ou de faire sortir les doublons lors d'une commande.

II. Cas d'utilisation de la commande uniq sous Linux

Durant ce tutoriel, je vais travailler avec le fichier "file.txt" ayant le contenu suivant :

Commande_Linux_Uniq_06

Cela vous permettra de mieux vous repérer dans l'exposition des options de la commande et de comprendre ce dont vous pouvez avoir besoin 🙂 .

A. Exclure les doublons

L'utilisation "standard" de uniq, c'est à dire sans option, affiche le contenu qu'on lui donne en excluant les lignes en double afin de n'avoir qu'une seule occurrence de celles-ci  :

uniq file.txt

Résultat :

Commande_Linux_Uniq_07

B. N'afficher que les lignes présentes une fois

Il est également possible de ne faire ressortir que les lignes présentes une seule fois dans notre fichier, les lignes présentes plusieurs fois seront alors totalement exclues de l'affichage :

uniq file.txt -u

Résultat :

Commande_Linux_Uniq_04

C. N'afficher que les lignes présentes plusieurs fois

A l'inverse, il est également possible de n'afficher que les lignes présentes plusieurs fois dans le fichier donné, celles-ci seront affichées une seule fois dans la sortie :

uniq file.txt -d

Résultat :

Commande_Linux_Uniq_01

Il est également possible d'effectuer le même traitement mais cette fois ci en affichant toutes les occurrences des lignes présentes plusieurs fois, on utilisera pour cela l'option "-D":

uniq file.txt -D

Résultat :

Commande_Linux_Uniq_02

D. Compter les occurrences des lignes en double

Une autre option très pratique est celle permettant de compter le nombre d'occurrence par ligne avec l'option "-c" :

uniq file.txt -c

Résultat :

Commande_Linux_Uniq_03On voit ici que la ligne "11" est présente deux fois, alors que la ligne "22" n'est elle présente qu'une fois. Une petite astuce, on peut utiliser la commande "sort" pour effectuer un tri croissant de cette sortie :

uniq file.txt -c |sort

Résultat :

Commande_Linux_Uniq_05

J'ai par exemple déjà eu à utiliser le couple uniq + sort dans le cadre d'analyse de logs web pour faire ressortir certaines IP 😉 J'espère que ce tutoriel vous aura été utile et que vous retiendrez la commande "uniq" qui est bien pratique !

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.

Nombre de posts de cet auteur : 527.Voir tous les posts

2 thoughts on “Trier les lignes en double avec la commande uniq sous Linux

  • Bonjour,
    Je constate que la commande uniq ne permet de supprimer QUE les doublons CONSÉCUTIFS.
    Si par exemple le fichier file.txt contient
    11
    12
    12
    13
    11
    12
    Et que l’on lance la commande uniq file.txt -c, cela donnera:
    1 11
    2 12
    1 13
    1 11
    1 12
    Ce qui ne correspond pas à la réalité des doublons du fichier file.txt !
    La solution que je vois est de faire un classement alphabétique lors de la création du fichier file.txt (avec un sort):
    cat file.txt |sort | uniq -c
    2 11
    3 12
    1 13

    Répondre

Répondre à Toto Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.