#1 Le 20/09/2016, à 20:11
- lynn
[RÉSOLU] Awk - délimiter un champs
Bonjour,
J'ai cette commande
awk '/tx/{print $2}' <(vnstat -i eno1 -tr)
qui fait suite à ce post donnant un résultat de ce style
700,15
Comment obtenir avec awk, uniquement l'affichage de la partie avant la virgule? Il me semble qu'il faut utiliser awk -F:' ' mais pour la suite, je nage un peu beaucoup!
Merci pour vos lumières.
Dernière modification par lynn (Le 22/09/2016, à 08:41)
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#2 Le 20/09/2016, à 20:32
- pingouinux
Re : [RÉSOLU] Awk - délimiter un champs
Bonsoir,
Quel est le résultat de
vnstat -i eno1 -tr
Ajouté :
Sinon
awk '/tx/{sub(",[0-9]+","",$2);print $2}' <(vnstat -i eno1 -tr)
Dernière modification par pingouinux (Le 20/09/2016, à 20:37)
Hors ligne
#3 Le 20/09/2016, à 22:24
- lynn
Re : [RÉSOLU] Awk - délimiter un champs
Bonsoir pingouinux,
Ça fonctionne.
Par contre, pourrais-tu m'expliquer la partie
sub(",[0-9]+","",$2)
Merci
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#4 Le 21/09/2016, à 05:12
- pingouinux
Re : [RÉSOLU] Awk - délimiter un champs
pourrais-tu m'expliquer la partie
sub(",[0-9]+","",$2)
Cela remplace, dans le deuxième champ, "une virgule suivie de un ou plusieurs chiffres" par "une chaîne vide".
Voir man awk, rubrique String Functions.
Ajouté : Il y a peut-être moyen de simplifier si tu montres le retour de cette commande
vnstat -i eno1 -tr
Dernière modification par pingouinux (Le 21/09/2016, à 05:16)
Hors ligne
#5 Le 21/09/2016, à 06:20
- lynn
Re : [RÉSOLU] Awk - délimiter un champs
Ajouté : Il y a peut-être moyen de simplifier si tu montres le retour de cette commande
vnstat -i eno1 -tr
Voici le résultat de cette commande
vnstat -i eno1 -tr
1218 packets sampled in 5 seconds
Traffic average for eno1
rx 203,43 kbit/s 102 packets/s
tx 1,13 Mbit/s 140 packets/s
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#6 Le 21/09/2016, à 06:39
- pingouinux
Re : [RÉSOLU] Awk - délimiter un champs
Je ne vois pas comment simplifier.
Voici deux autres façons de faire :
awk -F, '/tx/{sub("[^0-9]+","",$1);print $1}' <(vnstat -i eno1 -tr)
sed -nr 's/ +tx +(.+),.*/\1/p' <(vnstat -i eno1 -tr)
Remarque : Le résultat que tu obtiens n'a de sens que si tu connais l'unité qui suit (ici Mbit/s), qui n'est peut-être pas toujours la même.
Édité : Plus simple
awk -F"[ ,]+" '/tx/{print $3}' <(vnstat -i eno1 -tr)
Dernière modification par pingouinux (Le 21/09/2016, à 07:43)
Hors ligne
#7 Le 21/09/2016, à 07:56
- lynn
Re : [RÉSOLU] Awk - délimiter un champs
Remarque : Le résultat que tu obtiens n'a de sens que si tu connais l'unité qui suit (ici Mbit/s), qui n'est peut-être pas toujours la même.
Effectivement.
Pour expliquer brièvement, j'ai intégré dans un script, une commande qui vérifie la connexion à l'internet. Ce que je souhaite intégrer dans ce script, c'est la possibilité de passer ce test de connexion si il existe déjà une liaison en cours, qui renvoie grâce à ta commande, un nombre supérieur à 10. ( Dans mon cas et dans l'exemple présenté plus bas ( tx ou upload ) je sais que le nombre 10 sera obligatoirement des Kbit/s vu que je n'ai pas de connexion très haut débit... )
Le but étant d'éviter de pinguer un serveur si ce n'est pas nécessaire.
NB: Il semble que l'unité minimale de vnstat soit le kbit. Ci dessous, un test effectué dans une VM avec la connexion réseau désactivée.
vnstat -i enp0s3 -tr
3 packets sampled in 5 seconds
Traffic average for enp0s3
rx 0,45 kbit/s 0 packets/s
tx 0,00 kbit/s 0 packets/s
Dernière modification par lynn (Le 12/03/2017, à 15:38)
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne