Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/09/2016, à 21: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! tongue

Merci pour vos lumières.

Dernière modification par lynn (Le 22/09/2016, à 09:41)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#2 Le 20/09/2016, à 21: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, à 21:37)

Hors ligne

#3 Le 20/09/2016, à 23:24

lynn

Re : [RÉSOLU] Awk - délimiter un champs

Bonsoir pingouinux,

Ça fonctionne. smile

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, à 06:12

pingouinux

Re : [RÉSOLU] Awk - délimiter un champs

lynn a écrit :

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, à 06:16)

Hors ligne

#5 Le 21/09/2016, à 07:20

lynn

Re : [RÉSOLU] Awk - délimiter un champs

pingouinux a écrit :

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, à 07: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, à 08:43)

Hors ligne

#7 Le 21/09/2016, à 08:56

lynn

Re : [RÉSOLU] Awk - délimiter un champs

pingouinux a écrit :

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. smile

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, à 16:38)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne