# Extraction de données commande ping

**URL:** <https://www.debian-fr.org/t/extraction-de-donnees-commande-ping/59876>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 6:43 UTC](https://www.debian-fr.org/t/extraction-de-donnees-commande-ping/59876 "2016-02-21T18:43:35Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:43 UTC](https://www.debian-fr.org/t/extraction-de-donnees-commande-ping/59876/1 "2016-02-21T18:43:35Z")

</div>

Bonjour,

Je chercher a extraire le RTT et le %PACKET LOSS via la commande ping.  
Pour le moment j’y arrive, mais je dois lancer deux commandes PING (pas du tout propre !!!):  
1 =\> récupération RTT  
2 =\> récupération % PKLoss

```auto
google_rtt=`ping -c 1 -W 1 www.google.fr | grep rtt | tr '/' ' ' | awk '{print $7}'`
echo $google_rtt
google_pkloss=`ping -c 1 -W 1 www.google.fr | grep received | awk '{print $6}' | sed 's/%//g'`
echo $google_pkloss
```

Est-il possible de récupérer les valeurs de RTT & PK Loss en ne faisant qu’un seul Ping ?

```auto
ping=`ping -c 1 -W 1 www.google.fr`
RTT=$(echo $ping | grep rtt .....)
PKLOSS=$(echo $ping | grep .....)
```

Merci.

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:43 UTC](https://www.debian-fr.org/t/extraction-de-donnees-commande-ping/59876/2 "2016-02-21T18:43:57Z")

</div>

Bonjour,

Pas possible de faire une pierre deux coups ?

J’ai trouvé sur Google une fonction, qui ne marche pas, et que je n’arrive pas a l’adapter :

```auto
command="ping -q -n -c 3"
ip="173.194.78.94"

get_data() {
    local output=$($command $ip 2>&1)
    local method=$(echo "$output" | $gawk '
        BEGIN {pl=100; rtt=0.1}
        /packets transmitted/ {
            match($0, /([0-9]+)% packet loss/, datapl)
            pl=datapl[1]
        }
        /min\/avg\/max/ {
            match($4, /(.*)\/(.*)\/(.*)\/(.*)/, datartt)
            rtt=datartt[2]
        }
        END {print pl ":" rtt}
        ')
    RETURN_DATA=$method
}
```

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 6:43 UTC](https://www.debian-fr.org/t/extraction-de-donnees-commande-ping/59876/3 "2016-02-21T18:43:58Z")

</div>

Ton code d’origine fonctionne très bien… à condition que tu prennes la peine de mettre $ping entre guillemets dans le echo :

`ping=`ping -c 1 -W 1 www.google.fr`
RTT=$(echo "$ping" | grep rtt | tr '/' ' ' | awk '{print $7}')
PKLOSS=$(echo "$ping" | grep received | awk '{print $6}' | sed 's/%//g')
echo "$RTT"
echo "$PKLOSS"`

Au risque de [me répéter](https://www.debian-fr.org/ajouter-des-dans-le-texte-d-une-variable-t45651.html#p457739)… 😉

> [@syam](#):
>
> Et même remarque que pour ton post précédent (wget/curl) : pense à mettre tes variables entre guillemets pour ne pas avoir de surprises. Par défaut, tu devrais utiliser des guillemets partout. Il est très rare de vouloir spécifiquement le comportement «&nbsp;sans guillemets&nbsp;».

Il faut bien comprendre que quand tu utilises une variable sans mettre de guillemets autour, tous les retours chariot deviennent des espaces, et tous les espaces successifs deviennent un seul espace.

Variable d’origine :

`1 2
3 4`

Résultat avec echo $VARIABLE :

```auto
1 2 3 4
```

Tu comprends bien que dans ces conditions, tes filtrages ne marchent plus puisque tout est sur une seule ligne.

Autre problème sans les guillemets, les valeurs séparées par des espaces / retours chariots dans ta variable deviennent autant d’arguments différents pour le programme que tu appelles.

[code]$ cat \> compte-args \<\<EOF  
#!/bin/sh  
echo «&nbsp;$#&nbsp;»  
EOF

$ chmod +x compte-args

$ VARIABLE=«&nbsp;1 2 3 4  
5 6 7 8&nbsp;»

$ ./compte-args «&nbsp;$VARIABLE&nbsp;»  
1

$ ./compte-args $VARIABLE  
8[/code]

Bref, utilise TOUJOURS des guillemets autour de tes variables sauf quand tu veux explicitement le comportement sans guillemets que je viens de décrire. Ça t’évitera de nombreux bugs.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 6:44 UTC](https://www.debian-fr.org/t/extraction-de-donnees-commande-ping/59876/4 "2016-02-21T18:44:01Z")

</div>

Et toujours utiliser $() à la place de `` :

```auto
data=( $(ping -c 1 -W 1 www.google.fr | awk '/rtt/{gsub(/\/.*/,"",$4);print $4} /received/{gsub(/%/,"");print $6}') )
echo "${data[1]}"
echo "${data[2]}"
```

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:44 UTC](https://www.debian-fr.org/t/extraction-de-donnees-commande-ping/59876/5 "2016-02-21T18:44:41Z")

</div>

Bonjour ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")

@syam  
Oui tu as raison… Une erreur de ma part ![:079](https://www.debian-fr.org/uploads/default/original/1X/905412cc2e3f543d94c645aa4231b1f3197e2548.gif "flagelle")  
Je le fait, mais pas à chaque fois !!!

@MisterFreez

> [@](#):
>
> Et toujours utiliser $() à la place de `` :

Ouiii ![:038](https://www.debian-fr.org/uploads/default/original/1X/08df484251490af77ba342c0331f3ee271065fe9.gif "bravo")

Merci pour les remarques !

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 6:44 UTC](https://www.debian-fr.org/t/extraction-de-donnees-commande-ping/59876/6 "2016-02-21T18:44:42Z")

</div>

Coche verte ?

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:44 UTC](https://www.debian-fr.org/t/extraction-de-donnees-commande-ping/59876/7 "2016-02-21T18:44:42Z")

</div>

J’active la coche verte ![:041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif "applaudit")

Impec ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")
