Bonjour,
je suis un debutant en shell.
Dans un fichier qui contient plusieurs bloc define , comme un fichier nagios par exemple , je veux recuperer un bloc bien precis en ne sachant que l'IP ( j'ai mes raisons :) ). J'ai donc cherche sur la toile et j'ai trouve du code interessant. Apres quelques modifs et tests , j'ai ca comme code.
awk 'BEGIN{RS="}"} /define/ && /mon_IP/ { print $0 "}" }' mon_fichier
Mais voila , y a juste un truc qui m'ennui beaucoup.
Si je cherche une ip du genre xxx.xxx.xxx.5 , il va me donner tout les bloc correspondant aux iPs xxx.xxx.xxx.5 , xxx.xxx.xxx.50 , xxx.xxx.xxx.51 , xxx.xxx.xxx.52 , etc ....
Comment puis je faire pour qui ne me cherche que l'IP que je desire et seulement celle la?
Merci d'avance.
Forum Programmation.shell retrouver la vraie IP avec AWK ou autres
3
oct.
2007
# Exemple du fichier d'entrée
Posté par mekare . Évalué à 2.
Si celui-ci ne contient que des IP et que tu souhaites récupérer tout ce qui se termine en .5 alors il faut faire ça :
cat tonfichier |awk -F"." '{ if ($4 == 5) print $0}'
Sinon, merci de nous donner un exemple du fichier d'entrée
[^] # Re: Exemple du fichier d'entrée
Posté par furanku . Évalué à 1.
Voici un exemple de fichier. j'ai mis des IP locale , mais je travaille sur des IP global. Et ici j'ai mis que 3 define host , mais dans un meme fichier en principe , j'en ai plusieurs dizaines , voir plus.
Et donc je recherche a recuperer le define host qui correspond a 192.168.0.5 (dans cet exemple) sans me payer les autres. Et biensur je ne veux pas utiliser d'Autres arguments que l'IP
#cat mon_fichier.cfg
define host{
host_name db.masociete.com
alias db.masociete
address 192.168.0.5
use generic-host
contact_groups mail-report
parents switch-S50
}
define host{
host_name ns.masociete.com
alias ns.masociete.com
address 192.168.0.55
use generic-host
contact_groups mail-report
parents switch-S50
}
define host{
host_name db2.masociete.com
alias db.masociete
address 192.168.0.52
use generic-host
contact_groups mail-report
parents switch-S50
}
define hostgroup{
hostgroup_name switch-S5_host
alias switch-S5_host
members db.masociete.com,ns.masociete.com,db2.masociete.com
}
[^] # Re: Exemple du fichier d'entrée
Posté par furanku . Évalué à 1.
awk 'BEGIN{RS="}"} /define/ && /'192.168.0.5'/ { print $0 "}" }' mon_fichier.cfg
Et bien je recupere les 3 blocs dont les address sont 192.168.0.5 , 192.168.0.55 et 192.168.0.52.
[^] # Re: Exemple du fichier d'entrée
Posté par Obsidian . Évalué à 2.
# Je propose :
Posté par Obsidian . Évalué à 2.
En considérant bien sûr qu'il n'y a pas de zéro non-significatif à gauche de chaque nombre ...
[^] # Re: Je propose :
Posté par frederic blain . Évalué à 1.
awk 'BEGIN{RS="}"} /define/ && /192.168.0.5[^0-9]/ { print $0 "}" }' mon_fichier
[^] # Re: Je propose :
Posté par furanku . Évalué à 1.
Merci beaucoup. Vous m'enlevez tous une grosse epine du pied , comme on dit.
awk 'BEGIN{RS="}"} /define/ && /192.168.0.5[^0-9]/ { print $0 "}" }' mon_fichier =====> ca marche
awk 'BEGIN{RS="}"} /define/ && /192.168.0.5\n]/ { print $0 "}" }' mon_fichier =====> marche aussi
Quand a SED , je vais essayer plus tard .
Merci a TOUS .
[^] # Re: Je propose :
Posté par Étienne . Évalué à 3.
awk 'BEGIN{RS="}"} /define/ && /192.168.0.5\>/ { print $0 "}" }' mon_fichier
le \> correspond à "fin de mot"
# je tente :
Posté par snt . Évalué à 1.
[^] # Re: je tente :
Posté par totof2000 . Évalué à 2.
[^] # Re: je tente :
Posté par snt . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.