Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1418 connectés 

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

sed multiline

n°882222
farib
Posté le 29-01-2007 à 16:19:26  profilanswer
 

Yo
J'ai un fichier de data que je veux trifouiller. J'arrive à me dépatouiller pour ce que je veux faire sauf le truc "con": Mon unité de data est sur 3 lignes consécutives.
 
J'ai vu que c'était possible avec Sed, mais j'arrive pas à comprendre comment faire, pour par exemple, regrouper les paquets de 3 lignes consécutives sur 1 seule ligne (et ensuite me débrouiller seul)
http://www.unix.org.ua/orelly/unix [...] H-6-SECT-1
 
bref pour passer de


blabla1-ligne1
blabla1-ligne2
blabla1-ligne3
blabla2-ligne1
blabla2-ligne2
blabla2-ligne3


en


blabla1-ligne1 blabla1-ligne2  blabla1-ligne3
blabla2-ligne1 blabla2-ligne2  blabla2-ligne3


J'ai vu qu'il fallait manipuler avec des expressions genre {N;N:N;} et tout mais je suis largué.
Un ptit coup de main ? [:cupra]
 
EDIt : si vous avez d'autres commandes pourquoi pas !


Message édité par farib le 29-01-2007 à 16:24:58

---------------
Bitcoin, Magical Thinking, and Political Ideology
mood
Publicité
Posté le 29-01-2007 à 16:19:26  profilanswer
 

n°882257
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 29-01-2007 à 17:52:41  profilanswer
 

Sans sed :

 
Code :
  1. $ cat TEST | while read toto
  2. > do
  3. > LIGNE1=$toto
  4. > read LIGNE2
  5. > read LIGNE3
  6. > echo "$LIGNE1 - $LIGNE2 - $LIGNE3"
  7. > done


Ca donne :

Code :
  1. blabla1-ligne1 - blabla1-ligne2 - blabla1-ligne3
  2. blabla2-ligne1 - blabla2-ligne2 - blabla2-ligne3
 

Explication :
lecture du fichier ligne par ligne, une fois la première ligne lue on en lit 2 autres qu'on range dans des variables, puis on affiche comme on veut. Puis on boucle tant qu'on peut lire qqch (c'est à ca que sert le while)

   


Avec sed ca donnerait un truc du genre (je suis pas spécialiste en sed multiline) :

Code :
  1. $ cat TEST | sed -e '/blabla1-ligne1/N' -e '/blabla1-ligne1.*blabla1-ligne2/N' -e 's/\n/ - /g'


Ca donne :

Code :
  1. blabla1-ligne1 - blabla1-ligne2 - blabla1-ligne3
  2. blabla2-ligne1
  3. blabla2-ligne2
  4. blabla2-ligne3
 

Explication :
on cherche la ligne blabla1-ligne1 et quand on l'a trouvé on fait remonter la ligne suivante pour venir la mettre au bout de la ligne courante (c'est le N).
puis on cherche la ligne "blabla1-ligne1 suivi de blabla1-ligne2" et on remonte la suivante
puis on sur cette ligne contenant "les 3 à la suite" on remplace les \n (retour à la ligne) par des -


Message édité par Xavier_OM le 29-01-2007 à 18:20:44

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°882336
hdiamant
Posté le 29-01-2007 à 23:46:48  profilanswer
 

Intéressant. Merci pour l'info, c'est juste ce que je cherchais !

n°882338
M300A
Posté le 30-01-2007 à 00:16:04  profilanswer
 

heu: tr "\n" " "
 
non ?

n°882339
M300A
Posté le 30-01-2007 à 00:16:31  profilanswer
 

Oui je confirme ca fonctionne :p

n°882573
upconf
Posté le 30-01-2007 à 22:41:34  profilanswer
 

Ben ouais mais tout s'affiche sur une seule ligne alors.

n°883576
upconf
Posté le 03-02-2007 à 02:04:20  profilanswer
 

Bon la critique est facile etc ...

Code :
  1. sed "4,6d" test|tr "\n" " ";echo;sed "1,3d" test|tr "\n" " ";echo



Aller à :
Ajouter une réponse
 

Sujets relatifs
Plus de sujets relatifs à : sed multiline


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR