Comment utiliser la commande uniq sous Linux

La commande Linux uniq parcourt vos fichiers texte à la recherche de lignes uniques ou dupliquées. Dans ce guide, nous couvrons sa polyvalence et ses fonctionnalités, ainsi que la façon dont vous pouvez tirer le meilleur parti de cet utilitaire astucieux.

Recherche de lignes de texte correspondantes sous Linux

La commande uniq est rapide, flexible et excellent dans ce qu’il fait. Cependant, comme beaucoup de commandes Linux, il a quelques bizarreries – ce qui est bien, tant que vous les connaissez. Si vous franchissez le pas sans un peu de savoir-faire d’initié, vous pourriez bien vous gratter la tête face aux résultats. Nous soulignerons ces bizarreries au fur et à mesure.

La commande uniq est parfaite pour ceux qui sont dans le camp unique, conçu pour faire une chose et le faire bien. C’est pourquoi il est également particulièrement bien adapté pour travailler avec des tuyaux et jouer son rôle dans les pipelines de commandes. L’un de ses collaborateurs les plus fréquents est tri car uniq doit avoir des entrées triées sur lesquelles travailler.

Allumons-le!

Exécution d’uniq sans options

Nous avons un fichier texte contenant les paroles de Robert Johnson chanson Je crois que je vais épousseter mon balai. Voyons ce que l’uniq en fait.

Nous allons taper ce qui suit pour canaliser la sortie en moins:

uniq dust-my-broom.txt | less

le

Nous obtenons la chanson entière, y compris les lignes en double, en moins:

La sortie du

Cela ne semble pas être les lignes uniques ni les lignes dupliquées.

Exact – parce que c’est la première bizarrerie. Si vous exécutez uniq sans option, il se comporte comme si vous utilisiez l’option -u (lignes uniques). Cela indique à uniq de n’imprimer que les lignes uniques du fichier. La raison pour laquelle vous voyez des lignes en double est que, pour qu’uniq considère une ligne comme un doublon, elle doit être adjacente à son doublon, où le tri intervient.

  Les meilleures blagues, jeux et œufs de Pâques pour Google Assistant

Lorsque nous trions le fichier, il regroupe les lignes dupliquées et uniq les traite comme des doublons. Nous allons utiliser le tri sur le fichier, diriger la sortie triée vers uniq, puis diriger la sortie finale vers less.

Pour ce faire, nous tapons ce qui suit:

sort dust-my-broom.txt | uniq | less

le

Une liste triée de lignes apparaît en moins.

Sortie de sort dust-my-broom.txt | uniq | moins en moins dans une fenêtre de terminal

La phrase «Je crois que je vais épousseter mon balai» apparaît définitivement dans la chanson plus d’une fois. En fait, il est répété deux fois dans les quatre premières lignes de la chanson.

Alors, pourquoi apparaît-il dans une liste de lignes uniques? Parce que la première fois qu’une ligne apparaît dans le fichier, elle est unique; seules les entrées suivantes sont des doublons. Vous pouvez le considérer comme répertoriant la première occurrence de chaque ligne unique.

Utilisons à nouveau le tri et redirigeons la sortie dans un nouveau fichier. De cette façon, nous n’avons pas à utiliser le tri dans chaque commande.

Nous tapons la commande suivante:

sort dust-my-broom.txt > sorted.txt

le sorted.txt ”dans une fenêtre de terminal. ‘ width = ”646 ″ height =” 57 ″ onload = ”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);” onerror = ”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);”>

Maintenant, nous avons un fichier pré-trié avec lequel travailler.

Compter les doublons

Vous pouvez utiliser l’option -c (nombre) pour imprimer le nombre de fois où chaque ligne apparaît dans un fichier.

Tapez la commande suivante:

uniq -c sorted.txt | less

le

Chaque ligne commence par le nombre de fois où cette ligne apparaît dans le fichier. Cependant, vous remarquerez que la première ligne est vide. Cela vous indique qu’il y a cinq lignes vides dans le fichier.

Sortie du

Si vous voulez que la sortie soit triée par ordre numérique, vous pouvez alimenter la sortie d’uniq en tri. Dans notre exemple, nous utiliserons les options -r (inverse) et -n (tri numérique), et dirigerons les résultats vers less.

Nous tapons ce qui suit:

uniq -c sorted.txt | sort -rn | less

le

La liste est triée par ordre décroissant en fonction de la fréquence d’apparition de chaque ligne.

Sortie d'uniq -c sorted.txt | sort -rn | moins en moins dans une fenêtre de terminal

Répertorier uniquement les lignes en double

Si vous souhaitez afficher uniquement les lignes répétées dans un fichier, vous pouvez utiliser l’option -d (répétée). Peu importe le nombre de fois qu’une ligne est dupliquée dans un fichier, elle n’est répertoriée qu’une seule fois.

  Comment mettre à niveau Ubuntu Server

Pour utiliser cette option, nous tapons ce qui suit:

uniq -d sorted.txt

le

Les lignes dupliquées sont répertoriées pour nous. Vous remarquerez la ligne vierge en haut, ce qui signifie que le fichier contient des lignes vierges en double – ce n’est pas un espace laissé par uniq pour compenser de manière cosmétique la liste.

Sortie du

Nous pouvons également combiner les options -d (répété) et -c (nombre) et diriger la sortie via le tri. Cela nous donne une liste triée des lignes qui apparaissent au moins deux fois.

Tapez ce qui suit pour utiliser cette option:

uniq -d -c sorted.txt | sort -rn

le

Liste de toutes les lignes dupliquées

Si vous souhaitez voir une liste de chaque ligne dupliquée, ainsi qu’une entrée pour chaque fois qu’une ligne apparaît dans le fichier, vous pouvez utiliser l’option -D (toutes les lignes dupliquées).

Pour utiliser cette option, vous tapez ce qui suit:

uniq -D sorted.txt | less

le

La liste contient une entrée pour chaque ligne dupliquée.

Sortie d'uniq -D sorted.txt | moins en moins dans une fenêtre de terminal

Si vous utilisez l’option –group, elle imprime chaque ligne dupliquée avec une ligne vide avant (préfixer) ou après chaque groupe (ajouter), ou les deux avant et après (les deux) chaque groupe.

Nous utilisons append comme modificateur, nous tapons donc ce qui suit:

uniq --group=append sorted.txt | less

le

Les groupes sont séparés par des lignes vides pour faciliter leur lecture.

Sortie du

Vérification d’un certain nombre de caractères

Par défaut, uniq vérifie la longueur totale de chaque ligne. Si vous souhaitez limiter les vérifications à un certain nombre de caractères, vous pouvez cependant utiliser l’option -w (vérifier les caractères).

Dans cet exemple, nous allons répéter la dernière commande, mais limiter les comparaisons aux trois premiers caractères. Pour ce faire, nous tapons la commande suivante:

uniq -w 3 --group=append sorted.txt | less

le

Les résultats et les regroupements que nous recevons sont assez différents.

Sortie du

Toutes les lignes commençant par «I b» sont regroupées parce que ces parties des lignes sont identiques, elles sont donc considérées comme des doublons.

De même, toutes les lignes commençant par «Je suis» sont traitées comme des doublons, même si le reste du texte est différent.

  Comment utiliser PowerRename sur Windows 10 pour renommer des fichiers

Ignorer un certain nombre de caractères

Dans certains cas, il peut être avantageux de sauter un certain nombre de caractères au début de chaque ligne, par exemple lorsque les lignes d’un fichier sont numérotées. Ou, disons que vous avez besoin d’uniq pour sauter par-dessus un horodatage et commencer à vérifier les lignes à partir du caractère six au lieu du premier caractère.

Voici une version de notre fichier trié avec des lignes numérotées.

Un fichier numéroté et trié de lignes dupliquées en moins dans une fenêtre de terminal.

Si nous voulons qu’uniq commence ses vérifications de comparaison au caractère trois, nous pouvons utiliser l’option -s (skip chars) en tapant ce qui suit:

uniq -s 3 -d -c numbered.txt

le

Les lignes sont détectées comme des doublons et comptées correctement. Notez que les numéros de ligne affichés sont ceux de la première occurrence de chaque doublon.

Vous pouvez également ignorer des champs (une série de caractères et un espace blanc) au lieu de caractères. Nous utiliserons l’option -f (fields) pour indiquer à uniq les champs à ignorer.

Nous tapons ce qui suit pour dire à uniq d’ignorer le premier champ:

uniq -f 1 -d -c  numbered.txt

le

Nous obtenons les mêmes résultats que lorsque nous avons dit à uniq de sauter trois caractères au début de chaque ligne.

Ignorer le cas

Par défaut, uniq est sensible à la casse. Si la même lettre apparaît en majuscule et en minuscules, uniq considère que les lignes sont différentes.

Par exemple, consultez la sortie de la commande suivante:

uniq -d -c sorted.txt | sort -rn

le

Les lignes «Je crois que je vais dépoussiérer mon balai» et «Je crois que je vais dépoussiérer mon balai» ne sont pas traitées comme des doublons en raison de la différence de casse entre le «B» et «crois».

Si nous incluons l’option -i (ignorer la casse), cependant, ces lignes seront traitées comme des doublons. Nous tapons ce qui suit:

uniq -d -c -i sorted.txt | sort -rn

le

Les lignes sont désormais traitées comme des doublons et regroupées.

Linux met à votre disposition une multitude d’utilitaires spéciaux. Comme beaucoup d’entre eux, uniq n’est pas un outil que vous utiliserez tous les jours.

C’est pourquoi une grande partie de la maîtrise de Linux consiste à se souvenir quel outil résoudra votre problème actuel et où vous pourrez le retrouver. Si vous pratiquez, cependant, vous serez sur la bonne voie.

Ou, vous pouvez toujours simplement rechercher toptips.fr – nous avons probablement un article à ce sujet.