Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/06/2007, 12h32   #1
Membre du Club
 
Inscription : juin 2007
Messages : 68
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 68
Points : 42
Points : 42
Par défaut récuperer dans une variable ce que AWK affiche

Bonjour, je m'explique :

j'analyse un fichier qui ressemble à ca :

Citation:
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 :
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
Marcolinho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2007, 21h58   #2
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
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 :
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 :
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}%"
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2007, 11h36   #3
Membre du Club
 
Inscription : juin 2007
Messages : 68
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 68
Points : 42
Points : 42
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 :
Citation:
./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 :
 rta=$(awk -F "/" 'END {print $5}' ping.txt)     #-- recupere le temps moyen
Merci beaucoup pour ton aide
Marcolinho est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h14.


 
 
 
 
Partenaires

Hébergement Web