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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Récupèrer une ligne et les suivantes jusqu'au prochain pattern

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Récupèrer une ligne et les suivantes jusqu'au prochain pattern

n°2088778
asquel
Posté le 11-07-2011 à 19:08:52  profilanswer
 

Salut à tous,
 
Je me présente, asquel :) C'est la première fois que je poste sur ce forum, j'espère que tout se passera bien  :jap:  
 
J'ai une petite question aux pros du Bash / Shell tout ca quoi ^^
 
Voilà, j'ai un fichier de trace contenant au début de chaque ligne un identifiant de la session courante (normal jusque là), j'aimerais récupérer toutes les lignes contenant cet identifiant.
Bon jusque là j'aurais eu besoin de personne :)
 
Sauf que des fois dans mon fichier de traces, il y a une belle requete SQL écrite, et du coup ca fait un truc du genre :  
 
4e1ad10add2e8|general  |2011/07/11 12:31:39-1310380299.7891|debug|   |pdo_driver::exec - IUD SQL : INSERT INTO xxxxx (
                                `xxx` ,
                                `yyyy` ,
                                `zzz` ,
                                `bbb` ,
                                `ccc` ,
 
Lorsque je fais un grep / sed ou autre, je n'ai donc que la première ligne qui revient et pas le reste de ma requête sql.
Auriez vous une idée ?
 
Bien cordialement,
 
Axel
 

mood
Publicité
Posté le 11-07-2011 à 19:08:52  profilanswer
 

n°2089343
Sve@r
Posté le 13-07-2011 à 19:35:21  profilanswer
 

asquel a écrit :

Auriez vous une idée ?


Salut
 
Il te faut bien comprendre que si tu n'as rien qui te permettrait de différencier une ligne contenant le début de ton log d'une ligne contenant le milieu ou la fin de ton log, on ne pourra rien faire.
 
Cette base étant posée et admise, on va essayer de voir si on peut trouver une différence. A première vue avec ton exemple, je pencherais pour dire qu'une ligne contenant des pipes sera soit un log complet, soit un début de log. Et une ligne sans pipe sera la suite de la ligne précédente.
 
A partir de là, on peut poser l'algo suivant: on lit une ligne et on construit, avec la ligne lue, le log à afficher. Celui-ci ne sera affiché qu'une fois complet, c'est à dire quand on est sur une ligne indiquant un nouveau log.

Code :
  1. #!/bin/sh
  2. while read ligne
  3. do
  4.        # Vérifions s il y a un pipe
  5.        if echo "$ligne" |grep "|" 1>/dev/null
  6.        then
  7.            # Pipe donc on se trouve sur un nouveau log à traiter
  8.            # Mais d abord on gère et on affiche le log précédent (s il existe)
  9.            test -n "$log" && echo "$log"
  10.  
  11.            # Puisqu on est sur un nouveau log, on l initialise
  12.            log="$ligne"
  13.       else
  14.            # Pas de pipe donc on se trouve en milieu de log - On le rajoute alors au log en cours
  15.            log="$log $ligne"
  16.       fi
  17. done < fichier_log
  18.  
  19. # Ici on a traité la dernière ligne (dernier log) mais il n a pas été affiché vu que la boucle n affichait que le log précédent
  20. echo "$log"


 
Bon, j'ai tapé ça en live sans tester mais ça me semble pas mal...


Message édité par Sve@r le 13-07-2011 à 19:43:20

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Récupèrer une ligne et les suivantes jusqu'au prochain pattern

 

Sujets relatifs
Récupérer le prénom grâce à l'adresse mail[Grosse newb inside] - Recuperer et afficher des infos d'une base mysq
erreur dans un programm void après la dernière ligneTrie par ordre alphabetique ligne fichier txt
PING et NSLOOKUP dans excel ! (avancement 80%)Récupérer l'id d'une entrée au moment ou celle-ci est crée
vente de musique en ligneDéveloppement d'un outil de personnalisation en ligne
Extraire un mot d'une ligne suivant ce qui l'encadrerecuperer contenu du log mysql-bin.xxxx
Plus de sujets relatifs à : Récupèrer une ligne et les suivantes jusqu'au prochain pattern


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