IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

AWK : petit caprice de formatage


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Mandraxx
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2011
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 182
    Par défaut AWK : petit caprice de formatage
    Bonjour,

    Dans le cadre d'une surveillance de serveur, je relève le trafic réseau sur des protocoles donnés (paquets marqués avec iptables).
    La surveillance étant faite avec Ganglia (contrainte projet), je dois lire régulièrement mes compteurs absolus dans iptables pour alimenter ma métrique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /sbin/iptables -t mangle -L OUTPUT -v -n -x | sed 1,2d | grep 'MARK set 0x1'
    Jusque là, pas de soucis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     8088039 5194390582 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:1352 MARK set 0x1
     5020292 1613634853 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp spt:1352 MARK set 0x1
    Là où ça se corse, c'est qu'il me faut faire la somme de la deuxième colonne.
    Naturellement, j'ai pipé tout ça avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{ sum+=$2;} END {printf "%d\n",sum}'
    Tout roule quand je suis sur mon environnement de test (avec 3 octets et demi par secondes ) mais en prod, mes métriques sautent car passé un certain step awk me propose une sortie en notation scientifique (6.80808e+09) que Ganglia interprète comme une string et donc pas comme un uint...

    Ma question donc : peut-on inhiber ce comportement ? Avez-vous une autre idée pour faire cette addition qu'un programme C spécifique ?

    Merci d'avance.
    @+

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 852
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mandraxx Voir le message
    Bonjour,

    Dans le cadre d'une surveillance de serveur, je relève le trafic réseau sur des protocoles donnés (paquets marqués avec iptables).
    La surveillance étant faite avec Ganglia (contrainte projet), je dois lire régulièrement mes compteurs absolus dans iptables pour alimenter ma métrique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /sbin/iptables -t mangle -L OUTPUT -v -n -x | sed 1,2d | grep 'MARK set 0x1'
    Jusque là, pas de soucis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     8088039 5194390582 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:1352 MARK set 0x1
     5020292 1613634853 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp spt:1352 MARK set 0x1
    Là où ça se corse, c'est qu'il me faut faire la somme de la deuxième colonne.
    Naturellement, j'ai pipé tout ça avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{ sum+=$2;} END {printf "%d\n",sum}'
    Tout roule quand je suis sur mon environnement de test (avec 3 octets et demi par secondes ) mais en prod, mes métriques sautent car passé un certain step awk me propose une sortie en notation scientifique (6.80808e+09) que Ganglia interprète comme une string et donc pas comme un uint...

    Ma question donc : peut-on inhiber ce comportement ? Avez-vous une autre idée pour faire cette addition qu'un programme C spécifique ?

    Merci d'avance.
    @+
    Salut
    awk ou C sont limités dans les tailles de nombres. Je te propose de passer par un programme Python spécifique car Python possède une librairie en natif permettant de gérer les grands nombres

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    somme=0
    while True:
    	try:
    		line=raw_input()
    	except EOFError:
    		break
    	# try
    	somme+=long(line.split(" ")[1])
    # while
    print somme

    Tu enregistres ce code dans un fichier "toto.py" puis tu lances /sbin/iptables -t mangle -L OUTPUT -v -n -x | sed 1,2d | grep 'MARK set 0x1' | ./toto.py et tu auras ton résultat...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre chevronné Avatar de Mandraxx
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2011
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 182
    Par défaut
    Bonjour,

    Excellente suggestion.
    Merci beaucoup.

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction MonthName et petit caprice
    Par iFlo1 dans le forum Access
    Réponses: 7
    Dernier message: 03/09/2009, 17h54
  2. Petit souci AWK et REGEX
    Par DIE dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 19/12/2007, 22h09
  3. problème formatage de fichier avec awk
    Par nenekes dans le forum Shell et commandes GNU
    Réponses: 16
    Dernier message: 02/11/2006, 12h53
  4. Formatage de fichier avec awk
    Par sam56 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 12/10/2006, 11h04
  5. [awk] Formatage de float
    Par szdavid dans le forum Autres langages
    Réponses: 1
    Dernier message: 16/03/2006, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo