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 09/08/2012, à 14:01

Ariania

Incrémentation d'une variable tous les X fois [Résolu]

Bonjour,

Je voudrais votre aide concernant un programme que je fais. La 1ère partie à été réglé bien gentillement par un de vos collègues. Mais je suis à nouveau dans l'imapasse.

Donc voici mon programme:

#!/bin/bash
c=253
b=241

#Calcul le nombre d'occurence "define host afin de savoir le nombre d'hosts dans le fichier T2.txt
myvar=$(grep -o "define host" T2.txt| wc -l)
echo $myvar

    while read lig
    do
       [[ ${lig%%=*} == host_name ]] && ((c+=40))
       sed "s/x *=/& $c/;s/y *=/& $b/" <<<"$lig"
    done <T2.txt >T.txt

Je voudrais que tous les 30 hosts la variable y qui est statique pendant les 30 hosts s'incrémente de 55 pour les 30 hosts suivants ainsi de suite jusqu'à la fin.
Et je voudrais aussi que la variable x retourne a 253 pour le 31ème host et qu'elle continue à s'incrémenter de 40 ainsi de suite.

J'avais pensé à faire une boucle if mais cela fonctionnerait que pour les 30 premiers et pas les 30 autres. Ou meme une boucle while mais cela ne va pas fonctionner.

Merci d'avance pour vos réponses

Cordialement,

Dernière modification par Ariania (Le 10/08/2012, à 14:10)

Hors ligne

#2 Le 09/08/2012, à 15:57

pingouinux

Re : Incrémentation d'une variable tous les X fois [Résolu]

Rebonjour,

c=253
b=241
n=0
    while read lig
    do
       if [[ ${lig%%=*} == host_name ]]; then
          if [[ $n > 0 ]]; then
             ((c+=40))
             if [[ $((n%30)) == 0 ]]; then
                ((b+=55))
                c=253
             fi
          fi
          ((n+=1))
       fi
       sed "s/x *=/& $c/;s/y *=/& $b/" <<<"$lig"
    done <T2.txt  >T.txt

Autre solution :

n=0
    while read lig
    do
       if [[ ${lig%%=*} == host_name ]]; then
          c=$(( 253+(n%30)*40 ))
          b=$(( 241+(n/30)*55 ))
          ((n+=1))
       fi
       sed "s/x *=/& $c/;s/y *=/& $b/" <<<"$lig"
    done <T2.txt >T.txt

Dernière modification par pingouinux (Le 09/08/2012, à 16:53)

Hors ligne

#3 Le 10/08/2012, à 10:22

Ariania

Re : Incrémentation d'une variable tous les X fois [Résolu]

Bonjour,

Merci beaucoup je m'en vais tester le programme et je vous tient au courant.

Cordialement,

Hors ligne

#4 Le 10/08/2012, à 10:32

Ariania

Re : Incrémentation d'une variable tous les X fois [Résolu]

Bonjour,

J'ai testé les programmes ils fonctionnent c'est exactement ce que je voulais.
J'ai testé le changement juste tous les 2 hosts.
Je voudrais savoir lequel des 2 programmes est le plus rapide car je dois exécuter ce programme pour 500 hosts celui qui s'exécutera le plus vite.
Comme je dois générer une map dans Nagvis (Je sais pas si vous connaissez)

Merci pour vos réponses encore,

Cordialement,

Hors ligne

#5 Le 10/08/2012, à 11:38

pingouinux

Re : Incrémentation d'une variable tous les X fois [Résolu]

Bonjour Ariania,
Le second script du #2 est plus concis que le premier, et semble légèrement plus rapide, mais tu ne verras pas la différence pour 500 hosts.
Voici le résultat de mes tests (avec la commande time) :

  • Pour 500 hosts
    Premier script :
    real    0m25.358s
    user    0m0.560s
    sys    0m0.740s
    Second script :
    real    0m23.481s
    user    0m0.550s
    sys    0m0.650s

  • Pour 10000 hosts
    Premier script :
    real    7m33.129s
    user    0m26.190s
    sys    0m18.880s
    Second script :
    real    5m20.277s
    user    1m13.520s
    sys    0m31.860s

PS : Je ne connais pas Nagvis

Hors ligne

#6 Le 10/08/2012, à 13:08

Ariania

Re : Incrémentation d'une variable tous les X fois [Résolu]

Merci beaucoup pour ce test. Mais comment avez-vous fait pour tester 10 000 hosts quelle commande avez-vous tapé je suis curieuse de savoir. smile Un peu de savoir ne fait pas de mal smile
Cela pourrait etre intéréssant à l'avenir.

Excusez mon ignorance mais que veulent dire les variables user, real and sys. Je pense que sys veut dire le nombre de temps pour l'exécution sur le système hmm non ?

PS: Nagvis est un addon de Nagios. Nagios permet la supervision de machines sur le réseau en faisant des commandes qui renvoient les états des hosts comme le PING. Nagvis quand à lui permet de visualiser les différents host et l'état de leurs services sur une carte afin d'avoir une vue d'ensemble du réseau.

Hors ligne

#7 Le 10/08/2012, à 13:54

pingouinux

Re : Incrémentation d'une variable tous les X fois [Résolu]

Ariania #6 a écrit :

Mais comment avez-vous fait pour tester 10 000 hosts quelle commande avez-vous tapé je suis curieuse de savoir.

Pour doubler le nombre de lignes d'un fichier, une méthode est celle-ci :

cat T2.txt T2.txt >T2.tmp; mv T2.tmp T2.txt; wc -l T2.txt

En lançant cette commande 5 fois, par exemple, le nombre de lignes est multiplié par 2**5=32.

Ariania #6 a écrit :

que veulent dire les variables user, real and sys

Voir man time :

real : Temps qui s'est réellement écoulé avant le retour de la commande
user : Temps CP attribué à l'utilisateur pour la commande
sys  : Temps CP attribué au système pour la commande

Hors ligne

#8 Le 10/08/2012, à 14:04

Ariania

Re : Incrémentation d'une variable tous les X fois [Résolu]

Merci beaucoup pour l'aide apporté.

Cordialement,

Hors ligne