GNU/Linux >> Tutoriels Linux >  >> Linux

Supprimer les lignes en double adjacentes tout en conservant l'ordre ?

J'ai un fichier avec une colonne avec des noms qui se répètent plusieurs fois chacun. Je veux condenser chaque répétition en une seule, tout en gardant toutes les autres répétitions du même nom qui ne sont pas adjacentes aux autres répétitions du même nom.

Par exemple. Je veux tourner le côté gauche vers le côté droit :

Golgb1    Golgb1    
Golgb1    Akna
Golgb1    Spata20
Golgb1    Golgb1
Golgb1    Akna
Akna
Akna
Akna
Spata20
Spata20
Spata20
Golgb1
Golgb1
Golgb1
Akna
Akna
Akna

Voici ce que j'ai utilisé :perl -ne 'print if ++$k{$_}==1' file.txt > file2.txt
Cependant, cette méthode ne conserve qu'un seul représentant à partir de la gauche (c'est-à-dire que Golb1 et Akna ne sont pas répétés).

Existe-t-il un moyen de conserver des noms uniques pour chaque bloc, tout en conservant des noms qui se répètent dans plusieurs blocs non adjacents ?

Réponse acceptée :

uniq le fera pour vous :

$ uniq inputfile
Golgb1
Akna
Spata20
Golgb1
Akna

Linux
  1. Comment rechercher et supprimer des photos en double sous Linux

  2. Comment supprimer les lignes en double dans un fichier texte ?

  3. Comment supprimer les doublons dans le .bash_history, en préservant l'ordre ?

  4. Supprimer les champs en double dans une colonne donnée ?

  5. Comment supprimer le Bom d'un fichier UTF-8 ?

5 façons de compter le nombre de lignes dans un fichier

Supprimer la ligne contenant une certaine chaîne et la ligne suivante ?

La boucle while dans les scripts shell

Comment supprimer les lignes qui apparaissent sur le fichier B d'un autre fichier A ?

Quel est l'ordre par défaut du tri Linux ?

Changer l'ordre des lignes dans un fichier