SED pour un formatage précis de fichier

Résolu
arkard7 Messages postés 5 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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 !

4 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

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

    Avant => Après

    ;-))
    0
  3. 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
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
       sed 'N;N;s#\n# | #g' fichier
      0
    2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      sed '/url :/{h;N;s#\n# #g;G;N;s#\n# #2}'  fichier
      0
  4. 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
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      $ 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
    2. arkard7 Messages postés 5 Statut Membre
       
      Trop fort !!! Serait-ce encore trop demander de me fournir une petite explication rapide ?
      0
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      /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
    4. arkard7 Messages postés 5 Statut Membre
       
      Merci infiniment.
      0