IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Grep un peu particulier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2002
    Messages
    438
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 438
    Par défaut Grep un peu particulier
    Bonjour à tous,

    Voila j'ai un log du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                    Thu Jun 14 08:26:06 2007
    08:26:06 Ligne1....
    08:26:06 Ligne2....
    08:26:09 Ligne3.....
    09:30:00 ERROR.....
    ....
                    Fri Jun 15 08:30:06 2007
    08:30:06 Ligne1....
    08:30:06 Ligne2....
    08:30:09 Ligne3.....
    09:35:00 ERROR.....
    .....
    (C'est du log progress...)


    Ce log contient plusieurs années de trace. J'aimerais faire un grep du type :
    mais qu'il m'affiche en plus des lignes trouvées, la date qui se situe plusieurs lignes avant.

    Avez-vous une idée ?

    Merci par avance,

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n 3,4p mon_fichier
    affiche les lignes 3 et 4 de mon_fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -n monmotif mon_fichier
    indique le numéro de ligne qui correspond plutôt que la ligne.

    Il y a moyen d'associer ces commandes et d'y adjoindre une petit soustraction pour arriver à ce que tu veux faire...

    Mais je crois qu'il y a aussi une option de grep pour faire ça plus simplement.
    edit:
    peut être ?
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2002
    Messages
    438
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 438
    Par défaut
    Attention : Le nombre de ligne entre la ligne "ERROR" et la date est variable !
    Sinon cela serait trop simple !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
                    Thu Jun 14 08:26:06 2007
    08:26:06 Ligne1....
    08:26:06 Ligne2....
    08:26:09 Ligne3.....
    09:30:00 ERROR.....
    ....
                    Fri Jun 15 08:30:06 2007
    08:30:06 Ligne1....
    08:30:06 Ligne2....
    08:30:09 Ligne3.....
    08:30:09 Ligne4.....
    .....
    .....
    09:35:00 ERROR.....
    .....

  4. #4
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    je ne comprend pas ce qui te bloque.
    tu n'arrives pas à faire la différence entre les deux numéros de ligne ?
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "1 + 2" | bc
    3
    Peut être un problème d'algorithme ?
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  5. #5
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Solution en Sed pur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/^    /h; /ERROR/{x;p;x;p;}'
    T'as juste à corriger la regexp qui match la date (ici, je prends toute ligne qui commence par 4 espaces). La sortie affiche pour chaque erreur trouvée : la dernière date vue et la ligne d'erreur.

    Ca me semble plus efficace que de faire un script shell qui calcule les lignes. Le script fera rapidement plus de 10 lignes pour bien gérer ça (surtout si on travaille sur un flux potentiellement infini).

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2002
    Messages
    438
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 438
    Par défaut
    Absolument merveilleux !!!

    Si je peut abuser :

    Je passe ta commande sur plusieurs fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sed -n '/^    /h; /ERROR/{x;p;x;p;}' *.log
    Est-il possible d'afficher en plus le nom du fichier en cours d'analyse ?

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 137
    Par défaut
    Citation Envoyé par LLB
    Solution en Sed pur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/^    /h; /ERROR/{x;p;x;p;}'
    Respect total

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT]Tableau un peu particulier
    Par JohnBlatt dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/06/2006, 18h14
  2. Un tri un peu particulier
    Par GregPeck dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/06/2006, 15h32
  3. Menu un peu particulier avec des onmouseover
    Par Jinroh77 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/02/2006, 14h30
  4. #define un peu particulier
    Par greuh dans le forum C
    Réponses: 14
    Dernier message: 12/10/2005, 16h42
  5. Réponses: 2
    Dernier message: 05/01/2004, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo