J'ai un fichier avec une colonne avec des noms qui se répètent plusieurs fois. Je veux condenser chaque répétition en une seule, tout en conservant toutes les autres répétitions du même nom qui ne sont pas adjacentes à d'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
C'est ce que j'ai utilisé: perl -ne 'print if ++$k{$_}==1' file.txt > file2.txt
Cependant, cette méthode ne conserve qu'un représentant 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?
sort | uniq
sort -u
(:Awk
Solution:Le résultat:
la source
Essayez ceci - enregistrez la ligne précédente et comparez avec la ligne actuelle
Vous avez également marqué
uniq
- avez-vous essayé?la source
Avec sed, cela peut être fait comme suit:
Ici, nous avons dans l'espace de motif à tout moment 2 lignes. Lorsque la comparaison entre eux échoue, nous imprimons la première et la coupons par l'avant et revenons en arrière et ajoutons la ligne suivante dans l'espace de motif. Rincer ... répéter
En utilisant Perl en mode slurp, nous traitons le fichier entier comme une longue chaîne sur laquelle est appliquée l'expression rationnelle qui fait la comparaison pour vous.
la source
Question sur la solution sed de Rakesh Sharma.
Que faire si vous avez un fichier d'entrée tel que:
Et vous voulez qu'un fichier de sortie soit:
Notez les manquants:
Je sais que la commande que je veux est similaire à votre solution:
Impossible de le modifier de la bonne manière pour imprimer les deux colonnes et de ne le trier de cette manière spéciale qu'avec les valeurs de la colonne 2. Des conseils?
la source
sed -e '$!N' -e '/.*\.\([0-9]*\)\n.*\.\1$/!{P;D;}' -e 's/\n.*//;s/^/\n/;D'
supprimera les éléments répétés suivants. Remarque: cela nécessiteGNU sed
. Pour lePOSIX
comportement, il a besoin d'une légère modification.