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 :

AWK : Analyse d'un fichier log avec pattern [SH]


Sujet :

Shell et commandes POSIX

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 21
    Points : 20
    Points
    20
    Par défaut AWK : Analyse d'un fichier log avec pattern
    Bonjour,

    Je fais à nouveau appel à vos services pour l'écriture d'un script shell qui permettra de récupérer certaines informations issues d'un fichier (dont je ne maitrise pas la structure lorsqu'il est mis à disposition) avec en entrée 2 variables permettant d'identifier la bonne ligne.

    La structure du fichier est la suivante :

    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
     
    PART01;09/11/2017;VGPA$BAS;  5221068;  3258186;62;                         ^@^@^@^@^@^@^@
    PART01;09/11/2017;VGPEFLUX;   146160;   142760;98;                         ^@^@^@^@^@^@^@
    PART01;09/11/2017;VGPADBAS;  1234218;  1003108;81;                         ^@^@^@^@^@^@^@
    PART01;09/11/2017;VGPUNL  ;  1875720;  1482572;79;                         ^@^@^@^@^@^@^@
    PART02;09/11/2017;VGBOMNUR;   406000;   327503;81;                         ^@^@^@^@^@^@^@
    PART02;09/11/2017;VGBOMRUR;  1063720;   857238;81;                         ^@^@^@^@^@^@^@
    PART02;09/11/2017;VGPEDADS;   186760;   186145;>>;                         ^@^@^@^@^@^@^@
    PART02;09/11/2017;VGPEFLUX;    48720;    14959;31;                         ^@^@^@^@^@^@^@
    PART02;09/11/2017;VGPEINST;   113680;   100291;88;                         ^@^@^@^@^@^@^@
    PART02;09/11/2017;VGPUNL  ;   170520;   170156;>>;                         ^@^@^@^@^@^@^@
    PART02;09/11/2017;VGPERSVE;  3320956;  3316008;>>;                         ^@^@^@^@^@^@^@
    PART02;09/11/2017;VGPESAVE;   730800;   596829;82;                         ^@^@^@^@^@^@^@
    PART03;09/11/2017;VGPEUSER;    73080;    17711;24;                         ^@^@^@^@^@^@^@
    PART03;09/11/2017;VGPEWORK;   138040;   124329;90;                         ^@^@^@^@^@^@^@
    PART03;09/11/2017;VGPPCTRL;   267959;    92553;35;                         ^@^@^@^@^@^@^@
    PART03;09/11/2017;VGPEFLUX;   438472;   217562;50;                         ^@^@^@^@^@^@^@
    PART03;09/11/2017;VGPUNL  ;  3507696;  3503934;>>;                         ^@^@^@^@^@^@^@
    PART03;09/11/2017;VGPVTS  ;---------;---------;--;                         ^@^@^@^@^@^@^@
    PART03;09/11/2017;VGPVTS9 ;---------;---------;--;                         ^@^@^@^@^@^@^@
    Mes critères permettant d'identifier la bonne ligne se font sur la colonne et 1 et 3.

    J'ai commencé à traiter l'identification de la ligne à l'aide de la commande AWK mais je suis confronté à un problème sur les champs contenant des blancs en fin de chaîne sur la troisième colonnes.


    Commande d'identification de la ligne du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LIGNE=$(awk -F";" -v SERVEUR=$PART -v SERVICE=$STOG '{IGNORECASE=1} $1==SERVEUR && $3==SERVICE {print $0}' $FILE)
    Lorsqu'il n'y a pas de blanc en fin de chaine sur la troisième colonne, je récupère bien les informations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    PART="PART03"
    STOG="VGPPCTRL"
    FILE="/tmp/FICSTORAGE"
     
    LIGNE=$(awk -F";" -v SERVEUR=$PART -v SERVICE=$STOG '{IGNORECASE=1} $1==SERVEUR && $3==SERVICE {print $0}' $FILE)
    echo "LIGNE ==> $LIGNE"
     
    LIGNE ==> PART03;09/11/2017;VGPPCTRL;   267959;    92553;35;
    Mais lorsque j'effectue la même commande avec des blancs dans le champ, je ne récupère aucune valeur !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    PART="PART03"
    STO="VGPUNL"
    FILE="/tmp/FICSTORAGE"
     
    LIGNE=$(awk -F";" -v SERVEUR=$PART -v SERVICE=$STOG '{IGNORECASE=1} $1==SERVEUR && $3==SERVICE {print $0}' $FILE)
    echo "LIGNE ==> $LIGNE"
     
    LIGNE ==>
    Auriez-vous une idée pour ne pas tenir compte des blancs lors de ma recherche ?


    Vous remerciant par avance.

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 848
    Points : 6 535
    Points
    6 535
    Par défaut
    Utilise une chaîne formatée pour ajouter des espaces:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F";" -v SERVEUR=$PART -v SERVICE=$STOG 'BEGIN{SERVICE=sprintf("%-8s", SERVICE);IGNORECASE=1} $1==SERVEUR && $3==SERVICE' $FILE
    Sinon pourquoi ne pas tout faire avec awk?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Ou un simple grep :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ PART="PART03"
    $ STO="VGPUNL"
    $ echo 'PART03;09/11/2017;VGPUNL  ;  3507696;  3503934;>>;                         ^@^@^@^@^@^@^@' | grep "${PART} *;[^;]*;${STO} *;"
    PART03;09/11/2017;VGPUNL  ;  3507696;  3503934;>>;                         ^@^@^@^@^@^@^@
    Cordialement.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    Tout d'abord merci pour vos retours

    @ CosmoKnacki :

    Ta commande répond parfaitement à mes besoins.
    Je n'utilise pas le AWK par la suite car j'effectue différentes actions sur chaque champs en fonction de critères bien précis et mes compétences an AWK restent limitées...

    @ disedorgue :

    C'était mon intention de départ, mais la structure du fichier (venant du Mainframe) me remontait une erreur sur l'utilisation du GREP (certainement un problème de transco...).


    En tous cas, je vous remercie pour vos retours et clos la discution en résolu


    Merci encore ^^

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/05/2017, 16h13
  2. Réponses: 12
    Dernier message: 04/05/2017, 15h03
  3. 2 applis pour 1 seul fichier log avec log4j
    Par doudou13 dans le forum Logging
    Réponses: 5
    Dernier message: 12/12/2010, 17h44
  4. Nettoyer un fichier log avec Kettle
    Par Bugatti dans le forum kettle/PDI
    Réponses: 10
    Dernier message: 10/07/2010, 01h19
  5. Réponses: 6
    Dernier message: 14/06/2007, 16h36

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