Fatmawati Achmad Zaenuri / Shutterstock

Linux uniq commande fouille dans vos fichiers texte à la recherche de lignes uniques ou en double. 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

le uniq la commande est rapide, flexible et excellente dans ce qu’elle 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 des résultats. Nous soulignerons ces bizarreries au fur et à mesure.

le uniq la commande est parfaite pour ceux dans le camp unique, conçu pour faire une chose et faire le 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 commande. L’un de ses collaborateurs les plus fréquents est sort car uniq doit avoir trié l’entrée sur laquelle travailler.

Allons-y!

EN RELATION: Comment utiliser des tuyaux sur Linux

Exécuter uniq sans aucune option

Nous avons un fichier texte qui contient les paroles de la chanson de Robert Johnson Je crois que je vais dépoussiérer mon balai. Voyons ce que uniq en fait.

Nous allons taper ce qui suit pour diriger la sortie vers less:

uniq dust-my-broom.txt | less

La commande "uniq dust-my-broom.txt | less" dans une fenêtre de terminal.

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

La sortie de la commande "uniq dust-my-broom.txt | less" en moins dans une fenêtre de terminal.

Cela ne semble être ni les lignes uniques ni les lignes en double.

Oui, parce que c’est la première bizarrerie. Si vous courez uniq sans options, il se comporte comme si vous utilisiez le -u (lignes uniques) option. Cela raconte uniq pour imprimer uniquement les lignes uniques du fichier. La raison pour laquelle vous voyez des lignes en double est parce que, pour uniq pour considérer une ligne comme un doublon, elle doit être adjacente à son doublon, qui est l’endroit où sort entre.

Lorsque nous trions le fichier, il regroupe les lignes en double et uniq les traite comme des doublons. Nous utiliserons sort sur le fichier, canalisez la sortie triée dans uniq, puis canalisez la sortie finale dans less.

Pour ce faire, nous tapons ce qui suit:

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

La commande "sort dust-my-broom.txt | uniq | less" dans une fenêtre de terminal.

Une liste triée de lignes apparaît dans less.

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 sort et redirigez la sortie dans un nouveau fichier. De cette façon, nous n’avons pas à utiliser sort dans chaque commande.

Nous tapons la commande suivante:

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

La commande "sort dust-my-broom.txt> 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); »></p>
<p>Maintenant, nous avons un fichier pré-trié avec lequel travailler.</p>
<h2>Compter les doublons</h2>
<p>Vous pouvez utiliser le <code>-c</code> (count) option pour imprimer le nombre de fois où chaque ligne apparaît dans un fichier.</p>
<p>Tapez la commande suivante:</p>
<pre>uniq -c sorted.txt | less</pre>
<p><img decoding="async" loading="lazy" class="alignnone wp-image-536585 size-full" src="https://android24tech.com/wp-content/uploads/2020/02/1581738324_464_Comment-utiliser-la-commande-uniq-sous-Linux.png" alt=

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 de la commande "uniq -c sorted.txt | less" en moins dans une fenêtre de terminal.

Si vous souhaitez que la sortie soit triée par ordre numérique, vous pouvez alimenter la sortie à partir de uniq dans sort. Dans notre exemple, nous utiliserons le -r (inverse) et -n (tri numérique) et canalisez les résultats dans less.

Nous tapons ce qui suit:

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

La commande "uniq -c sorted.txt | sort -rn | less" dans une fenêtre de terminal.

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

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

Liste des lignes en double uniquement

Si vous ne voulez voir que les lignes qui se répètent dans un fichier, vous pouvez utiliser le -d option (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.

Pour utiliser cette option, nous tapons ce qui suit:

uniq -d sorted.txt

La commande "uniq -d sorted.txt" dans une fenêtre de terminal.

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 vides en double – ce n’est pas un espace laissé par uniq pour compenser cosmétiquement la liste.

Sortie de la commande "uniq -d sorted.txt" dans une fenêtre de terminal.

Nous pouvons également combiner les -d (répété) et -c (count) options et canaliser la sortie via sort. 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

La commande "uniq -d -c sorted.txt | sort -rn" dans une fenêtre de terminal.

Liste de toutes les lignes dupliquées

Si vous voulez 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 le -D (toutes les lignes en double).

Pour utiliser cette option, vous tapez ce qui suit:

uniq -D sorted.txt | less

La commande "uniq -D sorted.txt | less" dans une fenêtre de terminal.

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

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

Si vous utilisez le --group option, il imprime chaque ligne dupliquée avec une ligne vierge avant (prepend) ou après chaque groupe (append), ou à la fois avant et après (both) chaque groupe.

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

uniq --group=append sorted.txt | less

La commande "uniq --group = append sorted.txt | less" dans une fenêtre de terminal.

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

Sortie de la commande "uniq --group = append sorted.txt | less" en moins dans une fenêtre de terminal.

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

Par défaut, uniq vérifie toute la longueur de chaque ligne. Toutefois, si vous souhaitez limiter les contrôles à un certain nombre de caractères, vous pouvez utiliser le -w (vérifier les caractères).

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

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

La commande "uniq -w 3 --group = append sorted.txt | less" dans une fenêtre de terminal.

Les résultats et les regroupements que nous recevons sont très différents.

Sortie de la commande "uniq -w 3 --group = append sorted.txt | less" dans une fenêtre de terminal.

Toutes les lignes commençant par «I b» sont regroupées car 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.

Ignorer un certain nombre de caractères

Dans certains cas, il peut être avantageux d’ignorer 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 dites que vous avez besoin uniq pour sauter par-dessus un horodatage et commencer à vérifier les lignes 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 en double en moins dans une fenêtre de terminal.

Si nous voulons uniq pour commencer ses vérifications de comparaison au caractère trois, nous pouvons utiliser le -s (ignorer les caractères) en tapant ce qui suit:

uniq -s 3 -d -c numbered.txt

La commande "uniq -s 3 -d -c numbered.txt" dans une fenêtre de terminal.

Les lignes sont détectées comme 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 le -f (champs) option pour dire uniq quels champs ignorer.

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

uniq -f 1 -d -c  numbered.txt

La commande "uniq -f 1 -d -c numbered.txt" dans une fenêtre de terminal.

Nous obtenons les mêmes résultats que lorsque nous avons dit uniq pour 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 coiffée 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

La commande et sortie "uniq -d -c sorted.txt | sort -rn" dans une fenêtre de terminal.

Les lignes «Je crois que je vais épousseter mon balai» et «Je crois que je vais épousseter mon balai» ne sont pas traitées comme des doublons en raison de la différence de casse sur le «B» dans «croire».

Si nous incluons le -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

La commande "uniq -d -c -i sorted.txt | sort -rn" dans une fenêtre de terminal.

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 rappeler quel outil résoudra votre problème actuel et où vous pourrez le retrouver. Mais si vous vous entraînez, vous serez sur la bonne voie.

Ou, vous pouvez toujours simplement rechercher How-To Geek – nous avons probablement un article dessus.

LEAVE A REPLY

Please enter your comment!
Please enter your name here