SED pour un formatage précis de fichier

Résolu
arkard7 Messages postés 5 Statut Membre -  
jipicy Messages postés 41342 Statut Modérateur -
Bonjour,

Je cherche comment utiliser sed pour formater un fichier de la forme suivante :

[url : jdbc:mysql://XX.XX.XX.XX:3306/
active : 0
idle : 8
[url : jdbc:mysql://XX.XX.XX.XX:3306/
active : 0
idle : 8
[url : jdbc:mysql://XX.XX.XX.XX:3306/
active : 0
idle : 8

J'aimerais soit ajouter le texte de la 1ere ligne avant les lignes active et idle (pour pouvoir parser avec un grep après les connexions actives en fonction de lIP de la BDD correspondante et les connexions en Idle) ou enlever le retour chariot sur les 2 lignes suivantes à la ligne [url etc... puis faire de suite toutes les 3 lignes.

Le but est de pouvoir parser les lignes active et idle pour chaque IP de BDD du fichier.

Je me retourne la tête depuis un moment et ai regardé sur le net mais n'arrive pas à un résultat satisfaisant.

Merci d'avance !

A voir également:

4 réponses

dubcek Messages postés 19021 Statut Contributeur 5 638
 
hello
$ awk '/url/ {x=$0};/active/ {xx=$0};/idle/{print x,xx,"/",$0}' a2
[url : jdbc:mysql://XX.XX.XX.XX:3306/ active : 0 / idle : 8
[url : jdbc:mysql://XX.XX.XX.XX:3306/ active : 0 / idle : 8
[url : jdbc:mysql://XX.XX.XX.XX:3306/ active : 0 / idle : 8 
$  
1
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

Merci de poster un exemple précis de ton fichier en sortie :

Avant => Après

;-))
0
arkard7 Messages postés 5 Statut Membre
 
[url : jdbc:mysql://XX.XX.XX.XX:3306/
active : 0
idle : 8
[url : jdbc:mysql://XX.XX.XX.XX:3306/
active : 0
idle : 8
[url : jdbc:mysql://XX.XX.XX.XX:3306/
active : 0
idle : 8

qui donnerait ceci sachant que le XX correspond à la ligne précédente pour le "active" et à la deuxième ligne précédente pour l'"idle".

[url : jdbc:mysql://XX.XX.XX.XX:3306/ active : 0
[url : jdbc:mysql://XX.XX.XX.XX:3306/ idle : 8
[url : jdbc:mysql://XX.XX.XX.XX:3306/ active : 0
[url : jdbc:mysql://XX.XX.XX.XX:3306/ idle : 8
[url : jdbc:mysql://XX.XX.XX.XX:3306/ active : 0
[url : jdbc:mysql://XX.XX.XX.XX:3306/ idle : 8

Ou alors

[url : jdbc:mysql://XX.XX.XX.XX:3306/ active : 0 / idle : 8
[url : jdbc:mysql://XX.XX.XX.XX:3306/ active : 0 / idle : 8
[url : jdbc:mysql://XX.XX.XX.XX:3306/ active : 0 / idle : 8

J'espère etre à peu près clair.
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
 sed 'N;N;s#\n# | #g' fichier
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
sed '/url :/{h;N;s#\n# #g;G;N;s#\n# #2}'  fichier
0
arkard7 Messages postés 5 Statut Membre
 
Magique !!! Ca marche ! Je l'aurais pas trouvé celle-la !
Serait-ce trop demander d'avoir l'autre cas de figure, si c'est possible ? En ajoutant l'url correspondante à l'active et à l'idle ?
Merci encore.
0
dubcek Messages postés 19021 Statut Contributeur 5 638
 
$ awk '/url/ {x=$0};/active/ {print x,$0};/idle/{print x,$0}' fichier
[url : jdbc:mysql://XX.XX.XX.XX:3306/ active : 0 
[url : jdbc:mysql://XX.XX.XX.XX:3306/ idle : 8 
[url : jdbc:mysql://XX.XX.XX.XX:3306/ active : 0 
[url : jdbc:mysql://XX.XX.XX.XX:3306/ idle : 8 
[url : jdbc:mysql://XX.XX.XX.XX:3306/ active : 0 
[url : jdbc:mysql://XX.XX.XX.XX:3306/ idle : 8  
$  
0
arkard7 Messages postés 5 Statut Membre
 
Trop fort !!! Serait-ce encore trop demander de me fournir une petite explication rapide ?
0
dubcek Messages postés 19021 Statut Contributeur 5 638
 
/url/ {x=$0}
si la ligne contient url, on la stocke dans x
;/active/ {print x,$0}
si la ligne contient active, on imprime x contenant l'url puis la ligne
/idle/{print x,$0}
même chose pour la ligne contenant  idle
0
arkard7 Messages postés 5 Statut Membre
 
Merci infiniment.
0