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 POSIX Discussion :

[SCRIPT UNIX] : Boucler sur plusieurs erreurs dans un fichier


Sujet :

Shell et commandes POSIX

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2014
    Messages : 108
    Points : 30
    Points
    30
    Par défaut [SCRIPT UNIX] : Boucler sur plusieurs erreurs dans un fichier
    Bonjour à tous et à toute,

    Mon script qui permet de rechercher le ou les erreur(s) dans une log.

    Je remonte tout ce qu'il y a au dessus et en dessous de l'erreur en utilisant -C 20.

    Mon script comme ceci fonctionne bien avec seulement une seule erreur dans la log.
    Mais lorsque la log comporte plusieurs erreurs, il me dis qu'il y a trop d'arguments...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    REPRACINE="/opt/ResUrgences/Logs"
    REPDEPOT="/home/interface/dvt/Structure"
    PRINTLOG="$REPDEPOT/ResEDI_2051-CronParametrage.log"
    SURVLOG="$REPDEPOT/SURVLOG"
    #---- Recherche de la balise ERROR, recherche des objets et interfaces en erreurs ------#
        if  $(grep "ERROR" $PRINTLOG | grep "objet(s) en erreur" | cut '-d#'  -f6 | cut '-d ' -f1) -ne "0" 
           then
    			echo "KO" > $SURVLOG
    			grep -C 20 "ERROR" $PRINTLOG >> $SURVLOG	 
        fi
    J'ai donc pensé a faire un boucle foreach/for, mais je n'arrive pas à utiliser correctement la boucle et je ne sais pas si c'est possible ...

    Merci d'avance,

    Cordialement,

    Cahuet

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    parcourir un fichier se fait via

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read 
    do
    .......
    done < fichier
    $REPLY contient a chaque iteration la ligne uniqe de l iteration en cours

    tu peux ducoup l analyser et declancher ce que tu veux selon son contenu

  3. #3
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Mon script comme ceci fonctionne bien avec seulement une seule erreur dans la log.
    Ça m'étonnerait qu'il fonctionne bien puisque le "if" n'a pas de commande.
    Il faut écrire "if test" ou "if [ ... ]", les accolades étant un raccourci pour la commande test.

    Mais lorsque la log comporte plusieurs erreurs, il me dis qu'il y a trop d'arguments...
    Le "if" a trop d'arguments ... cf ci-dessus.

    Malgré la lecture de ton message, on ne comprend pas ton but. Tu lis un fichier log bien construit pour recréer un fichier pourri avec 20 lignes en dessus et 20 lignes en dessous de chaque erreur...
    Tu as des outils pour faire un travail plus sérieux.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2014
    Messages : 108
    Points : 30
    Points
    30
    Par défaut bonjour
    Ah pardon pour mon if il manque les [] je les ai oubliés en mettant le code dans la balise (faute de frappe)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    REPRACINE="/opt/ResUrgences/Logs"
    REPDEPOT="/home/interface/dvt/Structure"
    PRINTLOG="$REPDEPOT/ResEDI_2051-CronParametrage.log"
    SURVLOG="$REPDEPOT/SURVLOG"
    #---- Recherche de la balise ERROR, recherche des objets et interfaces en erreurs ------#
        if [ $(grep "ERROR" $PRINTLOG | grep "objet(s) en erreur" | cut '-d#'  -f6 | cut '-d ' -f1) -ne "0" ]
            then
    			echo "KO" > $SURVLOG
    			grep -C 20 "ERROR" $PRINTLOG >> $SURVLOG	 
        fi
    Et cela nous permet de nous remonter dans une log qu'il y a un problème.
    Car dans la log ou nous cherchons les erreurs elle peux atteindre les 880 000 lignes, autant dire c'est chercher une aiguille dans une botte de foin.
    C'est pour cela que j'essaye de mettre en place un script qui permet d'aller chercher les erreurs de la logs et les remonter dans une autre afin de facilité la lecture de la log ..

    C'est mon premier script, je suis débutante dans ce langage et je ne connait pas toute les solutions à ce sujet

  5. #5
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Cette erreur a manifestement un début "ERROR". Quelle est la fin ?

    (Peut-on avoir un extrait du fichier ? Quitte à anonymiser des parties)
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2014
    Messages : 108
    Points : 30
    Points
    30
    Par défaut
    voila un tout petit bout de la log :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    8:00:11,161#DEBUG#[Cron-Parametrage]#f.i.x.m.eof.EnterpriseContextImpl#[EnterpriseContextImpl.java:104]#deletedObjects : 0
    2016-04-13 08:00:11,165#DEBUG#[Cron-Parametrage]#c.r.e.service.user.UserService#[UserService.java:69]#Utilisateur Edi trouvé : Serveur d'interfaces
    2016-04-13 08:00:11,168#DEBUG#[Cron-Parametrage]#c.r.utils.change.DbChangePublisher#[DbChangePublisher.java:57]#changes publication disabled
    2016-04-13 08:00:11,168#DEBUG#[Cron-Parametrage]#fr.improve.xdi.Analyser#[Analyser.java:284]#** fin des sauvegardes en base
    2016-04-13 08:00:11,168#INFO#[Cron-Parametrage]#fr.improve.xdi.Analyser#[Analyser.java:289]#Objet fr.improve.xdi.mapping.eof.EnterpriseObjectImpl@1040461b intégré.
    2016-04-13 08:00:11,168#INFO#[Cron-Parametrage]#fr.improve.xdi.Analyser#[Analyser.java:318]#Fin de l'intégration de l'objet Medecin.
    2016-04-13 08:00:11,168#DEBUG#[Cron-Parametrage]#f.i.x.m.eof.EnterpriseContextImpl#[EnterpriseContextImpl.java:201]#endTransaction (unlock)
    2016-04-13 08:00:11,168#DEBUG#[Cron-Parametrage]#fr.improve.xdi.Analyser#[Analyser.java:344]#** sauvegarde des données en base ...
    2016-04-13 08:00:11,168#DEBUG#[Cron-Parametrage]#f.i.x.m.eof.EnterpriseContextImpl#[EnterpriseContextImpl.java:206]#beginTransaction (lock)
    2016-04-13 08:00:11,168#DEBUG#[Cron-Parametrage]#f.i.x.m.eof.EnterpriseContextImpl#[EnterpriseContextImpl.java:102]#insertedObjects : 0
    2016-04-13 08:00:11,168#DEBUG#[Cron-Parametrage]#f.i.x.m.eof.EnterpriseContextImpl#[EnterpriseContextImpl.java:103]#updatedObjects : 0
    2016-04-13 08:00:11,169#DEBUG#[Cron-Parametrage]#f.i.x.m.eof.EnterpriseContextImpl#[EnterpriseContextImpl.java:104]#deletedObjects : 0
    2016-04-13 08:00:11,171#DEBUG#[Cron-Parametrage]#c.r.e.service.user.UserService#[UserService.java:69]#Utilisateur Edi trouvé : Serveur d'interfaces
    2016-04-13 08:00:11,171#DEBUG#[Cron-Parametrage]#fr.improve.xdi.Analyser#[Analyser.java:347]#** fin des sauvegardes en base
    2016-04-13 08:00:11,171#DEBUG#[Cron-Parametrage]#f.i.x.m.eof.EnterpriseContextImpl#[EnterpriseContextImpl.java:201]#endTransaction (unlock)
    2016-04-13 08:00:11,172#INFO#[Cron-Parametrage]#c.r.parameters.xdi.ParamProcess#[ParamProcess.java:111]#3 objet(s) traité(s)
    2016-04-13 08:00:11,172#ERROR#[Cron-Parametrage]#c.r.parameters.xdi.ParamProcess#[ParamProcess.java:112]#1 objet(s) en erreur
    2016-04-13 08:00:11,172#ERROR#[Cron-Parametrage]#c.r.parameters.xdi.ParamProcess#[ParamProcess.java:113]#0 erreur(s) de l'interface
    2016-04-13 08:00:11,172#INFO#[Cron-Parametrage]#c.r.parameters.xdi.ParamProcess#[ParamProcess.java:84]#Intégration de medecins terminée.
     
    2016-04-13 08:00:11,128#DEBUG#[Cron-Parametrage]#fr.improve.xdi.Analyser#[Analyser.java:251]#<?xml version="1.0" encoding="UTF-8"?><Medecin handler="com.resu.parameters.xdi.MedecinHandler">
      <nom>TOTO</nom>
      <prenom>TOTO</prenom>
      <rue>3 TOTO</rue>
      <lieudit>TATA</lieudit>
      <specialite>
        <SpecialiteMed action="search">
          <cat searchKey="true">73</cat>
        </SpecialiteMed>
      </specialite>
      <type>0002</type>
      <ville>
        <Commune handler="com.resu.xdi.Commune">
          <codePostal>00000</codePostal>
          <intitule case="upper">TATA CEDEX</intitule>
        </Commune>
      </ville>
      <matricule>00000</matricule>
      <service>
        <Service action="search">
          <codeUF>9989</codeUF>
          <serviceParent/>
        </Service>
      </service>
      <debutValide format="yyyyMMddHHmm">190001010000</debutValide>
      <finValide format="yyyyMMddHHmm">209912312359</finValide>
      <rpps>10002472008</rpps>
    </Medecin>

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Les commandes grep/sed/awk sont faites pour manipuler des fichiers textes. Ici, pourquoi ne pas utiliser sed ?

    Quand on reconnaît la ligne, on extrait son numéro de ligne et son contenu.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ sed -n '/ERROR/{=;p}' fichier.log
    17
    2016-04-13 08:00:11,172#ERROR#[Cron-Parametrage]#c.r.parameters.xdi.ParamProcess#[ParamProcess.java:112]#1 objet(s) en erreur
    18
    2016-04-13 08:00:11,172#ERROR#[Cron-Parametrage]#c.r.parameters.xdi.ParamProcess#[ParamProcess.java:113]#0 erreur(s) de l'interface
    Ou plus discriminant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ sed -n '/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].[0-9][0-9]:[0-9][0-9]:[0-9][0-9].*#ERROR#/{=;p}' fichier.log
    17
    2016-04-13 08:00:11,172#ERROR#[Cron-Parametrage]#c.r.parameters.xdi.ParamProcess#[ParamProcess.java:112]#1 objet(s) en erreur
    18
    2016-04-13 08:00:11,172#ERROR#[Cron-Parametrage]#c.r.parameters.xdi.ParamProcess#[ParamProcess.java:113]#0 erreur(s) de l'interface
    Et tu peux re-traiter. Avant ou après.
    Par exemple, pour ne garder que l'intitulé de l'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ sed -n '/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].[0-9][0-9]:[0-9][0-9]:[0-9][0-9].*#ERROR#/{=;s/.*#[0-9]* //p}' fichier.log
    17
    objet(s) en erreur
    18
    erreur(s) de l'interface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ sed -n '/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].[0-9][0-9]:[0-9][0-9]:[0-9][0-9].*#ERROR#/{=;p}' fichier.log | sed 's/.*#[0-9]* //'                                                 
    17
    objet(s) en erreur
    18
    erreur(s) de l'interface
    Bref. Tout ça pour dire que si tu veux extraire une information précise, tu as des solutions.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2014
    Messages : 108
    Points : 30
    Points
    30
    Par défaut
    Bonjour Flodelarab,

    J'avoue que ce que tu viens de me montrer je ne le connais absolument pas, mais je viens de le tester et je t'avoue que c'est vraiment bien !
    Après avec ce que tu viens de me montrer est il possible de ressortir que les lignes ou (objet(s) en erreur et erreur(s) de l'interface) sont supérieur à 0 ?
    Car c'est vraiment cela que j'ai besoin de savoir quand c'est à 0 c'est qu'il n'y a pas d'erreur

    Merci beaucoup en tout cas pour ton aide !

  9. #9
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    J'imagine que c'est le nombre juste avant l'étiquette ?

    Au lieu de le bazarder, on le recycle dans le résultat de l'échange par ce qu'on appelle une référence arrière. On reprend l'expression entre parenthèses. Ici \1 pour le premier groupe entre parenthèses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ sed -n '/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].[0-9][0-9]:[0-9][0-9]:[0-9][0-9].*#ERROR#/{=;s/.*#\([0-9]*\) /\1\n/p}' error.dat 
    17
    1
    objet(s) en erreur
    18
    0
    erreur(s) de l'interface
    La première ligne est le numéro de ligne, affiché par la commande =.
    La seconde ligne est le code erreur juste avant l'étiquette récupéré par la substitution.
    La troisième ligne est la fin de l'étiquette écrite telle qu'elle.

    On pourrait mettre les 3 sur la même ligne, mais je ne sais pas quel caractère est disponible comme séparateur. Si on prend le ';', il ne faut jamais que l'erreur contienne de point-virgule ! Sinon, ce n'est pas ré-éxploitable.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2014
    Messages : 108
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    J'ai testé ce que vous venez de me donner, cela fonctionne bien, mais le but de ce script et d'écrire dans la SURVLOG que si objet(s) en erreur ou erreur(s) de l'interface est supérieur à 0 en faite.

    Et quand je regarde la fonction de sed il dise que c'est une expression qui sert à remplacer, choses que la elle recherche les erreurs donc je n'arrive pas a tout comprendre ..

  11. #11
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Au temps pour moi. J'avais zappé la nécessité que le nombre ne soit pas 0. Je fais l'hypothèse qu'un code erreur qui est supérieur à 0 ne commence pas par 0:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ sed -n '/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].[0-9][0-9]:[0-9][0-9]:[0-9][0-9].*#ERROR#.*#[1-9][0-9]*/{=;s/.*#\([1-9][0-9]*\) /\1\n/p}' error.dat 
    17
    1
    objet(s) en erreur
    Et quand je regarde la fonction de sed il dise que c'est une expression qui sert à remplacer, choses que la elle recherche les erreurs donc je n'arrive pas a tout comprendre ..
    L'option -n empêche l'affichage. Du coup, tu peux filtrer les lignes contenant "ERROR" comme un grep, et dans cette ligne, faire un remplacement pour qu'il ne reste que l'information nécessaire.

    Je ne suis même pas sûr que afficher le code erreur présente un intérêt pour toi si tu es sûr qu'il est strictement positif.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  12. #12
    Nouveau membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2014
    Messages : 108
    Points : 30
    Points
    30
    Par défaut
    D'accord je comprend mieux la fonction à présent, mais est ce que je peux faire plusieurs recherche par exemple si il y a plus d'un objet(s) en erreur est ce que c'est possible de rechercher les erreurs qui comprenne le mot DefaultIntegrateErrorHandler et xdi.GenericProcess ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sed -n '/DefaultIntegrateErrorHandler/{=;p}' Parametrage.log
    sed -n '/xdi.GenericProcess/{=;p}' Parametrage.log
    Et a partir de la ligne de commande que vous m'avez donnez comment je peux la rediriger dans une SURVLOG ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sed -n '/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].[0-9][0-9]:[0-9][0-9]:[0-9][0-9].*#ERROR#.*#[1-9][0-9]*/{=;s/.*#\([1-9][0-9]*\) /\1\n/p}' ResEDI_2051-CronParametrage.log $PRINTLOG >> $SURVLOG
    Merci pour votre aide

  13. #13
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Les réponses sont oui et oui, et tes exemples montrent que tu as compris.

    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  14. #14
    Nouveau membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2014
    Messages : 108
    Points : 30
    Points
    30
    Par défaut
    D'accord ça va je commence un peux a comprendre le truc je crois ^^
    Par contre je ne comprend pas trop la redirection dans un fichier =/

    Pourquoi ta commande sed a-t-elle 2 cibles dans ton dernier exemple, et avant la redirection ? Est-ce exprès ?
    Mon $PRINTLOG est ma log entière tandis que $SURVLOG est la log qui va contenir les erreurs si c'est ce que vous me demandiez.

  15. #15
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Mon $PRINTLOG est ma log entière tandis que $SURVLOG est la log qui va contenir les erreurs si c'est ce que vous me demandiez.
    Non. Les cibles que tu identifies ne sont pas bonnes.
    Ton sed a deux cibles:
    • Le fichier ResEDI_2051-CronParametrage.log
    • L'ensemble des fichiers $PRINTLOG

    Je dis "l'ensemble" car la variable ne sera pas prise en compte comme un seul fichier (attention les espaces dans les noms de fichiers) car elle n'est pas protégée par des double quotes: "$PRINTLOG"


    Ensuite, pour la redirection, c'est finalement assez simple. Les applications ont des canaux de communications (à ne pas confondre avec le code retour):
    0: entrée standard
    1: sortie standard
    2: sortie d'erreur

    Mais tu peux vouloir une sortie (ou entrée) autre que celle naturelle. Tu vas donc faire une redirection.

    ./commande.bash 2>/dev/null est une commande dans laquelle les messages d'erreurs sont redirigés dans la poubelle plutôt qu'à l'écran
    ./commande.bash 1>/dev/null est équivalent à ./commande.bash >/dev/null et met la sortie standard dans la poubelle plutôt qu'à l'écran. Mais les messages d'erreurs s'afficheront toujours. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ ls 1>/dev/null
    $ ls toto 1>/dev/null
    ls: impossible d'accéder à toto: Aucun fichier ou dossier de ce type
    ./commande.bash > fichier écrase le contenu existant alors que ./commande.bash >> fichier ajoute à la fin de fichier.


    Pour être complet, le code retour est 0 si l'application a fonctionné et un nombre entre 1 et 255 si l'application a planté et le code retour donne la nature de l'erreur. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ ls 1>/dev/null; echo $?
    0
    $ ls toto 1>/dev/null; echo $?
    ls: impossible d'accéder à toto: Aucun fichier ou dossier de ce type
    2
    La première commande a bien fonctionné et renvoyé 0.
    La seconde commande a mal fonctionné et renvoyé 2 car le fichier toto n'existe pas.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  16. #16
    Nouveau membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2014
    Messages : 108
    Points : 30
    Points
    30
    Par défaut
    D'accord j'ai a peux prêt cerné le truc, mais j'avoue que ce n'est pas très simple ^^ !
    Après j'ai une autre question comment je peux tronquer la ligne que je veut ressortir ?

    par exemple dans le fichier je vais avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2014-04-03 17:06:35,379#ERROR#[Process]#xdi.GenericProcess#(GenericProcess.java:62)#-Le fichier 'MEDECINS_chugot.chu'a été redirigé dans le repertoire d'erreur.
    Et j'aimerais qu'il me ressorte que le libellé : Le fichier 'MEDECINS_chugot.chu'a été redirigé dans le repertoire d'erreur.
    j'utilise ceci déja pour trouver l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/xdi.GenericProcess/{=;p}'
    mais j'ai du mal a utiliser le code " /^[0-9] ... ", j'aurais bien essayer d'utiliser cut mais est-ce que c'est une bonne solution ?

    Merci pour votre aide !

  17. #17
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    mais j'ai du mal a utiliser le code " /^[0-9] ... "
    Il faut que tu te formes sur
    • Les expressions régulières (en anglais regular expressions = regex)
    • La substitution avec sed.


    L'expression est lourde mais d'une simplicité enfantine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/xdi.GenericProcess/{=;s/.*#[1-9][0-9]* //p}'
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  18. #18
    Nouveau membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2014
    Messages : 108
    Points : 30
    Points
    30
    Par défaut
    oui j'essaye de regarder les cours pour comprendre un peux mieux, mais ce que vous venez de me donner me retourne que le numéro de la ligne c'est normal ?

    sed -n '/xdi.GenericProcess/{=;s/.*#[1-9][0-9]* //p}'
    C'est bien la bonne ligne ou il y a l'erreur mais je ne vois pas comment concerné que ce que je veut.
    J'ai essayer avec des cut mais je n'y arrive pas et je ne pense pas que se soit la solution avec le sed ...

  19. #19
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Peux-tu copier/coller la ligne renvoyée par la commande suivante ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/xdi.GenericProcess/p' fichier
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  20. #20
    Nouveau membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2014
    Messages : 108
    Points : 30
    Points
    30
    Par défaut
    ça me renvois ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2014-04-03 17:06:35,379#ERROR#[Process]#xdi.GenericProcess#(GenericProcess.java:62)#-Le fichier 'MEDECINS_chugot.chu'a été redirigé dans le repertoire d'erreur.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PPT-2007] Boucler sur une slide dans un diaporama de plusieurs slides
    Par lezoizo dans le forum Powerpoint
    Réponses: 4
    Dernier message: 13/09/2019, 15h01
  2. écrire sur plusieurs lignes dans un fichier
    Par kenny49 dans le forum Langage
    Réponses: 3
    Dernier message: 06/04/2007, 11h47
  3. [GD] Redimension d'image - plusieurs erreurs dans mon script
    Par Henry9 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 18/02/2007, 10h58
  4. Lister sur plusieurs colonnes dans état
    Par armagued dans le forum Access
    Réponses: 3
    Dernier message: 30/10/2005, 21h21
  5. Réponses: 2
    Dernier message: 21/09/2005, 12h18

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