#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.650sPour 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. Un peu de savoir ne fait pas de mal
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 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]
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.
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