Comment filtrer les infos d'un ping en temps réel?
Résolu
lsda26
Messages postés
70
Statut
Membre
-
dubcek Messages postés 19021 Statut Contributeur -
dubcek Messages postés 19021 Statut Contributeur -
Bonjour,
Bonjour,
J'essaie de filtrer et d'enregistrer dans un fichier uniquement les lignes que renvoi une commande ping et qui contiennent une valeur time >50.
Par exemple:
64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=4.85 ms
64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=1.37 ms
64 bytes from 192.168.1.1: icmp_req=3 ttl=64 time=1.07 ms
64 bytes from 192.168.1.1: icmp_req=4 ttl=64 time=1.05 ms
64 bytes from 192.168.1.1: icmp_req=5 ttl=64 time=1.17 ms
64 bytes from 192.168.1.1: icmp_req=6 ttl=64 time=15.4 ms
64 bytes from 192.168.1.1: icmp_req=7 ttl=64 time=1.06 ms
64 bytes from 192.168.1.1: icmp_req=8 ttl=64 time=0.977 ms
64 bytes from 192.168.1.1: icmp_req=9 ttl=64 time=1.54 ms
64 bytes from 192.168.1.1: icmp_req=10 ttl=64 time=1.62 ms
64 bytes from 192.168.1.1: icmp_req=11 ttl=64 time=1.10 ms
je souhaiterai donc pendant la commande de ping, enregistrer dans un fichier, uniquement les lignes ayant un "time" supérieur à 10. Soit dans ce cas, seulement la ligne:
64 bytes from 192.168.1.1: icmp_req=6 ttl=64 time=15.4 ms
Avec un ping + cut j'arrive à extraire toutes les valeur situées après le "time=", mais du coups je n'est plus la ligne complète. De plus je n'arrive pas à appliquer un if la valeur situé après le "time=" de la ligne du ping en cours est >10 alors affiche la ligne du ping en cours.
J'espère avoir été claire.
Merci pour votre aide.
Bonjour,
J'essaie de filtrer et d'enregistrer dans un fichier uniquement les lignes que renvoi une commande ping et qui contiennent une valeur time >50.
Par exemple:
64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=4.85 ms
64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=1.37 ms
64 bytes from 192.168.1.1: icmp_req=3 ttl=64 time=1.07 ms
64 bytes from 192.168.1.1: icmp_req=4 ttl=64 time=1.05 ms
64 bytes from 192.168.1.1: icmp_req=5 ttl=64 time=1.17 ms
64 bytes from 192.168.1.1: icmp_req=6 ttl=64 time=15.4 ms
64 bytes from 192.168.1.1: icmp_req=7 ttl=64 time=1.06 ms
64 bytes from 192.168.1.1: icmp_req=8 ttl=64 time=0.977 ms
64 bytes from 192.168.1.1: icmp_req=9 ttl=64 time=1.54 ms
64 bytes from 192.168.1.1: icmp_req=10 ttl=64 time=1.62 ms
64 bytes from 192.168.1.1: icmp_req=11 ttl=64 time=1.10 ms
je souhaiterai donc pendant la commande de ping, enregistrer dans un fichier, uniquement les lignes ayant un "time" supérieur à 10. Soit dans ce cas, seulement la ligne:
64 bytes from 192.168.1.1: icmp_req=6 ttl=64 time=15.4 ms
Avec un ping + cut j'arrive à extraire toutes les valeur situées après le "time=", mais du coups je n'est plus la ligne complète. De plus je n'arrive pas à appliquer un if la valeur situé après le "time=" de la ligne du ping en cours est >10 alors affiche la ligne du ping en cours.
J'espère avoir été claire.
Merci pour votre aide.
A voir également:
- Comment filtrer les infos d'un ping en temps réel?
- Maps satellite en temps réel - Guide
- Renommer plusieurs fichiers en même temps - Guide
- Partager sa position en temps réel - Guide
- 35 go internet combien de temps ✓ - Forum Free mobile
- Excel trier plusieurs colonnes en même temps - Guide
12 réponses
Salut,
une solution via awk :
une solution via awk :
ping -i 0.2 192.168.1.1 | awk -F"=" '{S=substr($NF,1,length($NF)-3);if (S>10) {print S} }'
Bonjour tuxboy et merci pour ton aide.
Mais cette commande ne semble pas fonctionner car cela m'affiche uniquement des valeurs par rafale des valeurs de la variable S qui sont en plus inférieur à 10. Alors que je ne devrais avoir que celle supérieur à 10.
De plus je ne veut pas afficher que S. Je veut afficher les lignes complètes du ping qui on une valeur S>10.
Mais je ne sais pas si c'est possible de mettre en mémoire la chaine de caractère de la ligne du ping dans une variable A=>chercher dans cette variable A si une valeur est supérieur à 10=>si oui, afficher la chaine entière contenue dans la variable A.
Biensur tous celà assez rapidement pour ne pas trops dévier entre le momment du ping et sont affichage à l'écran.
Mais cette commande ne semble pas fonctionner car cela m'affiche uniquement des valeurs par rafale des valeurs de la variable S qui sont en plus inférieur à 10. Alors que je ne devrais avoir que celle supérieur à 10.
De plus je ne veut pas afficher que S. Je veut afficher les lignes complètes du ping qui on une valeur S>10.
Mais je ne sais pas si c'est possible de mettre en mémoire la chaine de caractère de la ligne du ping dans une variable A=>chercher dans cette variable A si une valeur est supérieur à 10=>si oui, afficher la chaine entière contenue dans la variable A.
Biensur tous celà assez rapidement pour ne pas trops dévier entre le momment du ping et sont affichage à l'écran.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En grattant un peu, j'arrive à avoir à peu près ce que je veut avec cette commande:
ping 192.168.1.1 | awk -F "=" '{S=substr($NF,1,length($NF)-3);if (S>=5) {print $0} }'
Je dis à peu près car, en fait je n'arrive pas à voir les ligne de ping qui verifie la condition, en continu. On dirait qu'une grande quantité de ligne de ping verifiant la condition sont stocké en mémoire avant de les afficher par grappe après une long période sans rien afficher.
De quoi celà peut-il venir? Je voudrait traiter avec le awk, ping à son arrivé et donc les afficher tout de suite si il vérifie la condition...
ping 192.168.1.1 | awk -F "=" '{S=substr($NF,1,length($NF)-3);if (S>=5) {print $0} }'
Je dis à peu près car, en fait je n'arrive pas à voir les ligne de ping qui verifie la condition, en continu. On dirait qu'une grande quantité de ligne de ping verifiant la condition sont stocké en mémoire avant de les afficher par grappe après une long période sans rien afficher.
De quoi celà peut-il venir? Je voudrait traiter avec le awk, ping à son arrivé et donc les afficher tout de suite si il vérifie la condition...
hello
quelle version de awk ?
awk --version
essayer
quelle version de awk ?
awk --version
essayer
$ t=50; ping 192.168.1.1 | awk -F "[ =]*" -v t=$t '$(NF-1) > t {print; fflush()}'
voici ce que me renvoi la console après avoir lancé la commande: awk --version
awk: not an option: --version
Avec la commande précédente, on voie toujours apparaître les ligne de ping par vague de parfois 5 lignes, 15 lignes, etc...
awk: not an option: --version
Avec la commande précédente, on voie toujours apparaître les ligne de ping par vague de parfois 5 lignes, 15 lignes, etc...
Juste une dernière chose:
Avec la commande:
ping $IP -c 1 | grep icmp | awk -W interactive -F "[ =]*" -v t=$t '$(NF-1) > t {print}'
comment afficher la date+hh:mm:ss au debut de chaque ligne qui ressort après le awk
Merci
Avec la commande:
ping $IP -c 1 | grep icmp | awk -W interactive -F "[ =]*" -v t=$t '$(NF-1) > t {print}'
comment afficher la date+hh:mm:ss au debut de chaque ligne qui ressort après le awk
Merci
pas besoin du grep
ping $IP -c 1 | awk -W interactive -F "[ =]*" -v t=$t '/icmp/ && $(NF-1) > t {"date +\"%D %T\""|getline d; print d, $0}'