SED pour un formatage précis de fichier

Résolu/Fermé
arkard7 Messages postés 5 Date d'inscription mardi 31 août 2010 Statut Membre Dernière intervention 31 août 2010 - 31 août 2010 à 16:01
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 31 août 2010 à 16:40
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 31/08/2010 à 16:19
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
31 août 2010 à 16:03
Salut,

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

Avant => Après

;-))
0
arkard7 Messages postés 5 Date d'inscription mardi 31 août 2010 Statut Membre Dernière intervention 31 août 2010
31 août 2010 à 16:11
[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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
31 août 2010 à 16:19
 sed 'N;N;s#\n# | #g' fichier
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
31 août 2010 à 16:40
sed '/url :/{h;N;s#\n# #g;G;N;s#\n# #2}'  fichier
0
arkard7 Messages postés 5 Date d'inscription mardi 31 août 2010 Statut Membre Dernière intervention 31 août 2010
31 août 2010 à 16:20
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 31/08/2010 à 16:24
$ 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 Date d'inscription mardi 31 août 2010 Statut Membre Dernière intervention 31 août 2010
31 août 2010 à 16:26
Trop fort !!! Serait-ce encore trop demander de me fournir une petite explication rapide ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
31 août 2010 à 16:31
/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 Date d'inscription mardi 31 août 2010 Statut Membre Dernière intervention 31 août 2010
31 août 2010 à 16:34
Merci infiniment.
0