Concaténation de champs de lignes consécutives avec condition

Résolu/Fermé
RaySolu Messages postés 2 Date d'inscription mardi 6 mai 2014 Statut Membre Dernière intervention 7 mai 2014 - 6 mai 2014 à 16:38
RaySolu Messages postés 2 Date d'inscription mardi 6 mai 2014 Statut Membre Dernière intervention 7 mai 2014 - 7 mai 2014 à 21:16
Bonjour,
J'ai un fichier qui pour faire simple a le format suivant :
text1;opt1
text2;opt2
text3;opt3
text3;opt4
text4;opt5
text5;opt6
text5;opt7
text5;opt8
text6;opt9

Je souhaiterais le reformater ainsi :
text1;opt1
text2;opt2
text3;opt3-opt4
text4;opt5
text5;opt6-opt7-opt8
text6:opt9

En résume : si la ligne suivante possède la même valeur de 1er champ, ramener le 2ème champ sur la ligne courante avec un autre séparateur et supprimer la ligne suivante.
Possible d'avoir 2 ou 3 lignes consécutives ayant besoin de concaténation mais pas systématiquement comme dans l'exemple.

J'ai tenté d'utiliser sed et awk mais, petit joueur je n'y suis pas parvenu....
Peut-être aurez-vous une solution simple a me proposer ?

Cdt,
Ray Solu

3 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
6 mai 2014 à 18:59
Salut,

$ cat plop 
text1;opt1
text2;opt2
text3;opt3
text3;opt4
text4;opt5
text5;opt6
text5;opt7
text5;opt8
text6;opt9

$ sed -n '$p;:z;N;/^\([^;]*\).*\n\1;/{s/\n[^;]*//;s/;/-/2;tz};P;D' plop
text1;opt1
text2;opt2
text3;opt3-opt4
text4;opt5
text5;opt6-opt7-opt8
text6;opt9

3
Utilisateur anonyme
6 mai 2014 à 23:16
salut,,

zipe31 : on a dit simple! XD

avec awk:
awk -F';' '{a[$1]=a[$1]?a[$1]"-"$2:$2}END{for(i in a)print i";"a[i]}'
text1;opt1
text2;opt2
text3;opt3-opt4
text4;opt5
text5;opt6-opt7-opt8
text6;opt9
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
6 mai 2014 à 23:19
Aie aussi,

Ben quoi ? C'est à peine un poil plus chelou que awk ;-))
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
7 mai 2014 à 00:15
Mettons que les RegExp c'est un tantinet plus dur à comprendre...
0
RaySolu Messages postés 2 Date d'inscription mardi 6 mai 2014 Statut Membre Dernière intervention 7 mai 2014
7 mai 2014 à 21:16
Bonsoir Zipe31,
Quel talent... Respect ! et surtout MERCI
J'ai testé avec mes données en utilisant la version sed et c'est parfait.
Il a juste fallu que je supprime les guillemets qui étaient dans les datas.
Merci encore.
Ray Solu (grâce à vous...)
0