[sed] suppression de ligne consécutive
Résolu
claris
-
claris -
claris -
Bonjour,
Je souhaiterai supprimer des lignes identiques et consécutives dans un fichier texte avec sed.
le fichier ressemble à ceci :
je connais la commande suivante
je m'acharne dessus depuis toute l'après-midi, mais je n'arrive pas à la modifier de sorte à ce que le fichier en sortie donne :
En fait, il faut que la comparaison se face sur la chaine située avant le signe "#".
merci d'avance pour votre aide
Claris
Je souhaiterai supprimer des lignes identiques et consécutives dans un fichier texte avec sed.
le fichier ressemble à ceci :
z01105:6649#file0 z01105:6649#file1 z01105:6649#file1 z01105:6649#file1 z01105:6649#file1 e0117:10001#file0 e0117:10001#file1 p10186:10002#file0 p10186:10002#file1 p10186:10003#file1 n119160:808#file0 n119160:808#file1 z11192:29#file0 z11192:29#file1
je connais la commande suivante
sed "$!N; /^\(.*\)\n\1$/!P; D" fichier.txt
je m'acharne dessus depuis toute l'après-midi, mais je n'arrive pas à la modifier de sorte à ce que le fichier en sortie donne :
z01105:6649#file0 e0117:10001#file0 p10186:10002#file0 p10186:10003#file1 n119160:808#file0 z11192:29#file0
En fait, il faut que la comparaison se face sur la chaine située avant le signe "#".
merci d'avance pour votre aide
Claris
A voir également:
- [sed] suppression de ligne consécutive
- Forcer suppression fichier - Guide
- Partage de photos en ligne - Guide
- Mètre en ligne - Guide
- Formulaire en ligne de meta - Guide
- Aller à la ligne excel - Guide
9 réponses
Salut,
Essaie :
Cdt
Essaie :
sed ':b;$b;N;/^\(.*\)#.*\n\1#.*$/{s/\(.*\)#\(.*\)\n.*/\1#\2/g;bb};$b;P;D' fichier.txt
Cdt
J’avais en effet pas vu ça. Est-ce que ce qui est derrière le # est important ? Sinon tu peux filtrer : awk 'BEGIN{ FS="#" } {print $1}' fichier | uniq ?
Bah il a dit que c'est ce qu'il voulait dans sa sortie. Faudrait lui demander. Mais bon sinon un simple :
less fichier | cut -d'#' -f1 | uniq est ok. Mais bon ma commande sed marche et est parfaitement compréhensible non ? loool.
less fichier | cut -d'#' -f1 | uniq est ok. Mais bon ma commande sed marche et est parfaitement compréhensible non ? loool.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Autre solution : uniq a une option pour ne pas comparer les 1ers champs : rev fichier | IFS="#" uniq --option_qui_va | rev
Tu parles sûrement d'uniq -f1 oui c'est une bonne idée. Sauf que rev inverse caractères par caractères. Donc ta solution ne marchera pas.
Oui ça ok, mais j'avais oublié que si deux chaines sont équivalentes, leurs inverses aussi. La fatigue on va dire ^^
Super,
Ça marche nickel !!!
Je vous remercie infiniment tous les deux en en particulier fiddy
Cela-dit, si une petite explication pouvait accompagner la syntaxe tant recherchée ce serait un plus, histoire de comprendre un peu. Parce que dès qu'il s'agit de manipuler le cache je me perds, même avec comme support le tutoriel sed disponible sur ccm.
Encore merci
Ça marche nickel !!!
Je vous remercie infiniment tous les deux en en particulier fiddy
Cela-dit, si une petite explication pouvait accompagner la syntaxe tant recherchée ce serait un plus, histoire de comprendre un peu. Parce que dès qu'il s'agit de manipuler le cache je me perds, même avec comme support le tutoriel sed disponible sur ccm.
Encore merci