Suppression ligne dans fichier si valeur superieur à ....

Fermé
lsda26 - Modifié par lsda26 le 6/05/2013 à 10:19
dubcek Messages postés 18720 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 8 mai 2024 - 6 mai 2013 à 11:59
Bonjour,
Voici un extrait de mon fichier à traiter:
--- 137.121.161.201 ping statistics ---  
11 packets transmitted, 11 received, 0% packet loss, time 10001ms  
rtt min/avg/max/mdev = 0.424/0.469/0.534/0.041 ms  
vendredi 26 avril 2013, 12:38:15 (UTC+0200)  
ping du switch 137.121.161.201 à partir de HP-73 port 20  
PING 137.121.161.201 (137.121.161.201) 56(84) bytes of data.  
64 bytes from 137.121.161.201: icmp_req=1 ttl=64 time=0.455 ms  
64 bytes from 137.121.161.201: icmp_req=2 ttl=64 time=0.470 ms  
64 bytes from 137.121.161.201: icmp_req=3 ttl=64 time=0.476 ms  
64 bytes from 137.121.161.201: icmp_req=4 ttl=64 time=0.562 ms  
64 bytes from 137.121.161.201: icmp_req=5 ttl=64 time=0.475 ms  
64 bytes from 137.121.161.201: icmp_req=6 ttl=64 time=27.8 ms  
64 bytes from 137.121.161.201: icmp_req=7 ttl=64 time=28.2 ms  
64 bytes from 137.121.161.201: icmp_req=8 ttl=64 time=94.2 ms  
64 bytes from 137.121.161.201: icmp_req=9 ttl=64 time=123 ms  
64 bytes from 137.121.161.201: icmp_req=10 ttl=64 time=112 ms  
64 bytes from 137.121.161.201: icmp_req=11 ttl=64 time=148 ms  

--- 137.121.161.201 ping statistics ---  
11 packets transmitted, 11 received, 0% packet loss, time 10004ms  
rtt min/avg/max/mdev = 0.455/48.829/148.134/55.706 ms  
vendredi 26 avril 2013, 12:38:26 (UTC+0200)  
ping du switch 137.121.161.201 à partir de HP-73 port 20  
PING 137.121.161.201 (137.121.161.201) 56(84) bytes of data.  
64 bytes from 137.121.161.201: icmp_req=1 ttl=64 time=153 ms  
64 bytes from 137.121.161.201: icmp_req=2 ttl=64 time=168 ms  
64 bytes from 137.121.161.201: icmp_req=3 ttl=64 time=220 ms  
64 bytes from 137.121.161.201: icmp_req=4 ttl=64 time=237 ms  
64 bytes from 137.121.161.201: icmp_req=5 ttl=64 time=163 ms  
64 bytes from 137.121.161.201: icmp_req=6 ttl=64 time=233 ms  
64 bytes from 137.121.161.201: icmp_req=7 ttl=64 time=235 ms  
64 bytes from 137.121.161.201: icmp_req=8 ttl=64 time=172 ms  
64 bytes from 137.121.161.201: icmp_req=9 ttl=64 time=230 ms  
64 bytes from 137.121.161.201: icmp_req=10 ttl=64 time=191 ms  
64 bytes from 137.121.161.201: icmp_req=11 ttl=64 time=194 ms


Je souhaite supprimer toute les lignes de ce fichier contenant la chaine "time=" et ayant une valeur qui suit inferieur à 20 (ms)

Merci
J'arrive à recupérer les valeurs en miliseconde avec:
cat $fichier | grep "time=" | cut -d "=" -f 2 | cut -d " " -f 1
mais je n'arrive pas à faire un test de cette valeur pour chaque ligne du fichier et de supprimer la ligne correspondante si le test et positif.

Merci pour votre aide!

A voir également:

4 réponses

mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 752
Modifié par mamiemando le 6/05/2013 à 10:46
Bonjour,

Je pense que ce serait beaucoup plus simple avec awk ou un script shell. Sur le principe il te faut extraire la valeur avec une expression régulière et la tester. En fonction du résultat tu réécris ou non la ligne.

Bonne chance
0
Je suis pas un pro de awk malheureusement.
J'ai réussit à filtrer ce que je voulais avec 3 sed successif:
sed -i '/time=[0-1][0-9]\.[0-9]\ ms$/d' $fichier
sed -i '/time=0\.[0-9][0-9][0-9]\ ms$/d' $fichier
sed -i '/time=[0-9].[0-9][0-9]\ ms$/d' $fichier

Mais maintenant je me retrouve avec des paragraphes sans un seul ping.
du type:
--- 137.121.161.201 ping statistics ---
11 packets transmitted, 11 received, 0% packet loss, time 10001ms
rtt min/avg/max/mdev = 0.456/0.593/1.037/0.172 ms
vendredi 26 avril 2013, 11:26:18 (UTC+0200)
ping du switch 137.121.161.201 à partir de HP-73 port 20
PING 137.121.161.201 (137.121.161.201) 56(84) bytes of data.

--- 137.121.161.201 ping statistics ---
11 packets transmitted, 11 received, 0% packet loss, time 9997ms
rtt min/avg/max/mdev = 0.457/0.550/0.868/0.120 ms
vendredi 26 avril 2013, 11:26:28 (UTC+0200)
ping du switch 137.121.161.201 à partir de HP-73 port 20
PING 137.121.161.201 (137.121.161.201) 56(84) bytes of data.


donc je souhaite supprimer les 6 lignes précedante si après "PING 137.121.161.201 (137.121.161.201)" la ligne est "vide"
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
6 mai 2013 à 10:57
Salut,

awk -F'[ =]' '$10 > 20 { print }' fichier

0
merci mais j'aimerai n'effacer les lignes
--- 137.121.161.201 ping statistics ---
11 packets transmitted, 11 received, 0% packet loss, time 9997ms
rtt min/avg/max/mdev = 0.457/0.550/0.868/0.120 ms
vendredi 26 avril 2013, 11:26:28 (UTC+0200)
ping du switch 137.121.161.201 à partir de HP-73 port 20
PING 137.121.161.201 (137.121.161.201) 56(84) bytes of data.


seulement si il n'y a pas de ping supérieur à 20ms, donc supprimer ces ligne si il n'y a pas de ping après la ligne "PING 137.121.161.201 (137.121.161.201) 56(84) bytes of data."
0
dubcek Messages postés 18720 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 8 mai 2024 5 615
6 mai 2013 à 10:58
hello
awk -F "[ =]+" '/time=/ && $(NF-1)<20.0 {next} {print}' fichier
0
Merci pour la commande awk!
Par contre je retrouve comme à la suite de mes commandes sed, avec des paragraphes sans un seul ping. Donc quand un paragraphe n'a pas de ping j'aimerais le supprimer. Donc supprimer de la ligne "--- 137.121.161.201 ping statistics ---" à la ligne "PING 137.121.161.201 (137.121.161.201)" pour ne garder que des paragraphe avec des pings et ainsi ne garder que l'essentiel de mon fichier de sortie.
0
dubcek Messages postés 18720 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 8 mai 2024 5 615
6 mai 2013 à 11:59
essayer ça
awk -F "[ =]+" '/^---/ {h="\n" $0; n=1; next} $0 !~ /time=/ {h=h "\n" $0} /time=/ {if($(NF-1)>20.0){if(n){print h; n=0}; print}}' fichier
0