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 :

Parsing d'un fichier en KSH


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Kazevil
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2006
    Messages : 105
    Par défaut Parsing d'un fichier en KSH
    Bonsoir à tous,

    j'aurais besoin d'un coup de main pour l'utilisation de awk ou sed pour parser un fichier de log.

    J'ai des routines PL/SQL, qui spool leurs actions dans un fichier de log. Le but est que lorsqu'un pb survient lors de l'exécution d'une routine la chaine suivante est mise dans le log:

    .......... SQLCODE : -XXXXX .......................

    La chaine XXXXX est un nombre pouvant aller de 1 à 99999.

    Il faut que je récupère ce nombre dans un variable sauf s'il vaut 54. Petite précision, la chaine peut apparaitre plusieurs fois dans le fichier et la première occurrence est suffisante.

    J'ai déjà essayé avec awk et plusieurs formes d'expression régulière.

    A++

    Kaz

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    avec sed :
    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
    cat Kazevil-20090728.dat
    .......... SQLCODE : -56321 .......................
    .......... SQLCODE : -3920 .......................
    .......... SQLCODE : -54 .......................
    .......... SQLCODE : -654 .......................
    var=$(sed -n '/-54 /!s/[^-]*-\([0-9]*\) \.*/\1/p;q' Kazevil-20090728.dat)
    echo $var
    56321
    cat Kazevil-20090728.dat
    .......... SQLCODE : -54 .......................
    .......... SQLCODE : -56321 .......................
    .......... SQLCODE : -3920 .......................
    .......... SQLCODE : -654 .......................
    var=$(sed -n '/-54 /!s/[^-]*-\([0-9]*\) \.*/\1/p;q' Kazevil-20090728.dat)
    echo $var
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre éprouvé Avatar de Kazevil
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2006
    Messages : 105
    Par défaut
    Salut,

    merci beaucoup pour ta réponse (super) rapide.

    Par contre j'ai un dernier soucis

    Dans ton deuxième exemple:

    cat Kazevil-20090728.dat
    .......... SQLCODE : -54 .......................
    .......... SQLCODE : -56321 .......................
    .......... SQLCODE : -3920 .......................
    .......... SQLCODE : -654 .......................
    var=$(sed -n '/-54 /!s/[^-]*-\([0-9]*\) \.*/\1/p;q' Kazevil-20090728.dat)
    echo $var
    $var devrait tout de même contenir 56321. En fait je dois détecté si au moins une erreur, qui ne soit pas 54, a eu lieu.

    Est-ce que c'est possible de le faire continuer uniquement si -54 est le premier trouvé?

    Merci

    Kaz

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n ':test /-54 .*/!{s/[^-]*-\([0-9]*\) \.*/\1/p;q};d; b test' Kazevil-20090728.dat
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre éprouvé Avatar de Kazevil
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2006
    Messages : 105
    Par défaut
    Super,

    merci pour la commande. Je dois encore faire quelques tests, mais ça me semble vraiment pas mal!!

    Histoire de ne pas seulement récupérer la commande tel quelle, mais de quand même un peu la comprendre plus en détail, pourrais tu quand tu as le temps (c'est pas urgent) sa composition

    sed -n ':test /-54 .*/!{s/[^-]*-\([0-9]*\) \.*/\1/p;q};d; b test' Kazevil-20090728.dat
    Si j'ai bien suivie, le -n est pour la négation du -54. Par contre j'ai plus de mal pour le reste. Le s/ est pour la substitution, si je ne me trompe pas et le /p pour print. La partie .*/!{s/[^-]*-\([0-9]*\) \.*/ est pls " mystérieuse pour moi...

    Merci

    Kaz

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    Je suis un très mauvais pédagogue Il est préférable de regarder ici (à adapter selon ta version de sed !), et .
    L'aride man_page peut être utile aussi, ainsi que le beaucoup plus prolixe info sed.
    Et ici encore...

    Cependant, je peux déjà te dire que -n n'est pas la négation de l'expression recherchée, c'est une option qui permet de n'afficher que la partie pertinente désignée avec p, et non tout le fichier. La négation de l'expression recherchée, c'est le !.
    Les accolades {} permettent de grouper les commandes à éxécuter si la condition est remplie.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. Parsing d'un fichier
    Par Premium dans le forum C
    Réponses: 27
    Dernier message: 18/05/2006, 18h34
  2. Erreur d'évaluation (parse) dans le fichier web.xml de l'application
    Par popinenhbourg dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 15/05/2006, 15h38
  3. Parsing d'un fichier texte
    Par anibal dans le forum C
    Réponses: 2
    Dernier message: 18/04/2006, 14h33
  4. Réponses: 3
    Dernier message: 16/02/2006, 18h38
  5. [DOM] Erreur lors du parsing d'un fichier XML par l'API DOM
    Par patricetoan dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 26/09/2005, 12h43

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