Suppression ligne dans fichier si valeur superieur à ....
Fermé
lsda26
-
Modifié par lsda26 le 6/05/2013 à 10:19
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 - 6 mai 2013 à 11:59
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 - 6 mai 2013 à 11:59
A voir également:
- Suppression ligne dans fichier si valeur superieur à ....
- Forcer suppression fichier - Guide
- Fichier rar - Guide
- Aller à la ligne excel - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
4 réponses
mamiemando
Messages postés
33473
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
21 janvier 2025
7 815
Modifié par mamiemando le 6/05/2013 à 10:46
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
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
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:
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"
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"
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
6 mai 2013 à 10:57
6 mai 2013 à 10:57
Salut,
awk -F'[ =]' '$10 > 20 { print }' fichier
merci mais j'aimerai n'effacer les lignes
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."
--- 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."
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
6 mai 2013 à 10:58
6 mai 2013 à 10:58
hello
awk -F "[ =]+" '/time=/ && $(NF-1)<20.0 {next} {print}' fichier
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.
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.
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
6 mai 2013 à 11:59
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