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 :

récuperer dans une variable ce que AWK affiche


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Par défaut récuperer dans une variable ce que AWK affiche
    Bonjour, je m'explique :

    j'analyse un fichier qui ressemble à ca :

    PING *.*.*.* (*.*.*.*) 32(60) bytes of data.

    --- *.*.*.* ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3009ms
    rtt min/avg/max/mdev = 0.457/0.528/0.570/0.051 ms
    j'essaie de récuperer le pourcentage de paquet perdu, et le rrt avg
    pour pouvoir les analyser (pour nagios)
    pour cela j'utilise ce code shell, mais mon problème c'est que je n'arrive pas à stocker dans mon script les valeurs qu'affiche awk.

    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
     
    #################################################
    #
    # Execute un ping de 4 paquets de 32 Octets sur
    # sur l'hote pase en parametre.
    #
    #################################################
    if [ $# -eq 1 ]
    then
            ping -c 4 -s 32 -q $1 > ping.txt
            if [ $? -eq 0 ]
            then
                    x= 0
                    y= 0
                    awk -F "/" 'END {$x = $5}' ping.txt
                    awk -F "," '/%/ {$y = $3}' ping.txt
                    echo "PING OK -- RTA = " $x "ms, Paquets perdus : " $y"%"
                    exit 0    #-- etat OK
            else
                    echo "ECHEC PING"
                    exit 2    #-- etat critique
            fi
    else
            echo "Nom de l'hote invalide"
            exit
    fi
    Donc si vous saviez comment récupérer ces valeurs pour que je puisse les traiter ca serait gentil !
    Merci

  2. #2
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Citation Envoyé par Marcolinho
    awk -F "/" 'END {$x = $5}' ping.txt
    awk -F "," '/%/ {$y = $3}' ping.txt
    echo "PING OK -- RTA = " $x "ms, Paquets perdus : " $y"%"
    [/CODE]
    Donc si vous saviez comment récupérer ces valeurs pour que je puisse les traiter ca serait gentil !
    Merci

    Affectation des variables x et y
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x=`awk -F "/" 'END {print $5}' ping.txt`
    y=`awk -F "," '/%/ {print $3}' ping.txt`

    Autre solution avec sed ( http://www.shellunix.com/regexp.html )

    En vert : sélection de la ligne à traiter
    En rouge : motif de substitution
    En pourpre : partie de chaîne mémorisée dans \1
    En bleu : remplacement du motif de substitution par \1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    y=`sed -n "/^[0-9].*packets/s/^.*received, \([^%]*\).*$/\1/p" ping.txt`
    x=`sed -n "/^rtt/s/^.* = \([^/]*\).*$/\1/p" ping.txt`
    echo "PING OK -- RTA = $x ms, Paquets perdus : ${y}%"

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Par défaut
    Merci beaucoup pour ta réponse.
    Seulement lorsque je n'initialise ces valeurs, il me semble que le script essaye d'exécuter celles ci :
    ./ping32B: line 15: 0.532: command not found
    ./ping32B: line 19: 0: command not found
    si tu sais comment régler çà ?!

    Sinon je vais essayer de voir avec sed, j'aime bien comprendre ce qu'il se passe dans les lignes que tu m'as proposé !

    Merci

    EDIT :
    je viens de trouver une autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     rta=$(awk -F "/" 'END {print $5}' ping.txt)     #-- recupere le temps moyen
    Merci beaucoup pour ton aide

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

Discussions similaires

  1. [Batch] Récuperer dans une variable, la valeur d'une commande
    Par SanTa62 dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 06/07/2010, 18h08
  2. Réponses: 1
    Dernier message: 31/08/2009, 22h48
  3. [Fonction]récuperer dans une variable le résultat d'une requete
    Par nejisama8 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 28/04/2007, 12h34
  4. Comment afficher une valeur contenue dans une variable ?
    Par manubrard dans le forum Langage
    Réponses: 5
    Dernier message: 20/02/2006, 15h56
  5. Réponses: 11
    Dernier message: 11/03/2005, 17h41

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