Un pense-bête

Trucs de geek : La commande uniq

Voici bien une commande que je ne connaissais pas mais qui peut être intéressante dans l'écriture de scrips bash : uniq.

Cette commande permet de supprimer les doublons dans les fichiers texte. Attention les lignes supprimées seront celles qui se suivent : si une ligne se répète à différent endroit du fichier elle ne sera pas supprimée. Pour cela il faudrait trier le fichier avant avec sort.

Soit le fichier text.txt :

aa
bb
bb
cc
ee
ee
ff

Pour supprimer les lignes en double, il suffit de saisir :

$ uniq test.txt

donne :

aa
bb
cc
ee
ff

 Pour compter les lignes en double dans le fichier :

$ uniq -c test.txt

donne

1 aa
2 bb
1 cc
2 ee
1 ff

Pour n'afficher que les lignes en double :

$ uniq -d test.txt

donne :

bb
ee

Pour n'afficher que les lignes uniques du fichier :

$ uniq -u test.txt

donne :

bb
ee

Autre possibilité : vous avez un fichier dont certaines lignes débutent par des séquences communes que vous souhaitez considérer alors comme des lignes dupliquées. On ne travaille que sur le début de la ligne. Soit le fichier :

Unix  Linux
Unix  BSD
Unix  OS X
DOS   MS/DOS
DOS   FreeDos
DOS   Windows
Autre GCOS

On ne va travailler que sur les 6 premiers caractères de chaque ligne.

Pour compter les lignes en double :

$ uniq -c -w 6 test.txt

donne :

3 Unix  Linux
3 DOS   MS/DOS
1 Autre GCOS

 A l’inverse vous pouvez omettre le début des lignes si par exemple chacune de vos lignes sont numérotées les rendant toutes uniques :

Soit le fichier :

1 aa
2 aa
3 bb
4 cc
5 cc
6 dd
7 ee

Pour supprimer les doublons :

$ uniq -s 2 test.txt

donne

1 aa
3 bb
4 cc
6 dd
7 ee

Pour n'avoir que les lignes uniques dans ce fichier :

$ uniq -u -s 2 test.txt

donne :

3 bb
6 dd
7 ee

Il est aussi possible d'omettre le ou les premiers champ de chaque ligne avec l'option -f. Le même résultat pourrait être obtenu avec :

$ uniq -u -f 1 test.txt

Fait le 07/06/2013