Script shell, modification de fichiers (.csv)

Fermé
padowan Messages postés 21 Date d'inscription lundi 14 janvier 2008 Statut Membre Dernière intervention 21 février 2008 - 18 févr. 2008 à 10:48
padowan Messages postés 21 Date d'inscription lundi 14 janvier 2008 Statut Membre Dernière intervention 21 février 2008 - 19 févr. 2008 à 11:18
Bonjour à tous,

Je voudrai de l'aide pour un petit souci de script shell


Pour mon script.
Tout d'abord il concerne l'outil de supervision réseau nagios que je dois mettre en place dans ma société.
Je veux réaliser un script me permettant d'avoir un fichier .csv avec les infos intéressantes sur les machine que je supervisionne sur mon réseau.

Les infos que je dois récupérer sont dans le fichiers retention.dat (une infime partie prsente ci dessous.

------------------------------------------------------
host {
host_name=NT6SIEXT03A
modified_attributes=0
check_command=check-host-alive
event_handler=
has_been_checked=1
check_execution_time=0.035
check_latency=0.000
last_state=0
plugin_outpu=PING OK - Packet loss = 0%, RTA = 0.99 ms
active_checks_enabled=1
passive_checks_enabled=1
}

host {
host_name=R-Arras
modified_attributes=0
check_command=check-host-alive
event_handler=
has_been_checked=1
check_execution_time=0.035
check_latency=0.000
last_state=0
plugin_outpu=PING OK - Packet loss = 0%, RTA = 0.99 ms
active_checks_enabled=1
passive_checks_enabled=1
}

service {
host_name=NT6SIEXT03A
service_description
modified_attributes=0
check_command=check-host-alive
event_handler=
has_been_checked=1
check_execution_time=0.035
check_latency=0.000
last_state=0
plugin_outpu=Now: Mean:0.000% Variance:0.00%
active_checks_enabled=1
passive_checks_enabled=1
}

----------------------------------------------------------

Ce que j'ai déjà fait.

#!/bin/sh
#editon csv

var=$(grep '\(host_name\|plugin_output\)' var/log/nagios/retention.dat)
echo $var > test.csv

pour l'instant ce script récupére des infos ligne par lignes , mais il me concaténe toutes les ligne que je récupére.

Je voudrai par exemple insérer un retour à la ligne dés que dans le .csv je rencontre le mot host. mais je ne vois pas du tout comment faire.


J'en ai parlé avec un habitué de ce forum qui fut d'une aide précieuse (jipicy).

Il ma donné cette réponse qui fonctionne quand le fichier est un fichier texte simple mais pas un .dat

sed -n '/^host_name/h;{/}/!{/^plugin_output/{H;g;s/\n/;/p;d}}}' monfichier

Si quelqun aurait déja eu ce probléme ou aurait une solution.

Merci d'avance à tous .
A voir également:

8 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 févr. 2008 à 10:54
Salut,

Peux-tu mettre sur Cjoint ton fichier ".dat" (ou une partie tout au moins si c'est possible bien entendu...).

Merci ;-)
1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
19 févr. 2008 à 11:08
sed -n '/^\thost_name/h;{/}/!{/^\tcheck_command/H;/^\tplugin_output/{H;g;s/\n/;/g;s/\t//gp;d}}}'
;-))
1
padowan Messages postés 21 Date d'inscription lundi 14 janvier 2008 Statut Membre Dernière intervention 21 février 2008 3
18 févr. 2008 à 11:22
voilà le lien ,

Merci de prendre encor du temps pour moi

http://cjoint.com/data/cslvk1iQbP.htm
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 févr. 2008 à 11:41
Rajoute ce qui est en gras (en fait il faut rechercher les "host_name" commençant par une tabulation ainsi que les "plugin_output" eux aussi commençant par une tabulation et non en début de ligne (^)) :
sed -n '/^\thost_name/h;{/}/!{/^\tplugin_output/{H;g;s/\n/;/p;d}}}'
;-))

Édit : Et rajoute ça pour supprimer les tabulations :
sed -n '/^\thost_name/h;{/}/!{/^\tplugin_output/{H;g;s/\n/;/;s/\t//gp;d}}}'
;-))
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 févr. 2008 à 18:11
Pour ceux que ça intéressent, voilà la version commentée :
#n                      # Affichage sur demande

/^\thost_name/ h {      # Si on rencontre le motif "host_name" précédé d'une tabulation
                        #+ on le place dans la mémoire annexe
/}/ !{                  # Tant qu'on ne rencontre pas une accolade fermante on lit les lignes
                        #+ suivantes
/^\tplugin_output/ {    # Si on rencontre le motif "plugin_output" précédé d'une tabulation
      H                 # On l'ajoute au contenu de la mémoire annexe
      g                 # On récupère le contenu de la mémoire annexe en le paçant dans
                        #+ la mémoire principale
      s/\n/;/           # On substitue le caractère fin de ligne par un point virgule
      s/\t//gp          # On supprime les tabulations et on affiche le contenu de la
                        #+ mémoire principale sur la sortie standard
      d                 # On efface le contenu de la mémoire principale et on redémarre
                        #+ un nouveau cycle
        }
    }
}
;-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
padowan Messages postés 21 Date d'inscription lundi 14 janvier 2008 Statut Membre Dernière intervention 21 février 2008 3
18 févr. 2008 à 14:05
Merci beaucoup Jicipy, c'est rare de trouver des gens aussi patient et serviable sur les forums de nos jours.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 févr. 2008 à 14:10
Non je ne suis pas le dernier des Mohicans ;-))

Au fait, ça marche ou pas ?
0
padowan Messages postés 21 Date d'inscription lundi 14 janvier 2008 Statut Membre Dernière intervention 21 février 2008 3
18 févr. 2008 à 17:23
oui ça marche très bien , encore merci
0
padowan Messages postés 21 Date d'inscription lundi 14 janvier 2008 Statut Membre Dernière intervention 21 février 2008 3
19 févr. 2008 à 10:47
Désolée de t'embéter ou plutôt de vous embéter tous , imaginons que je veuille récpérer trois informations et non deux , (host_name, plugin_output et check_command) j'ai essayer de reproduire les mêmes ligne en tentant des variantes mais rien ne sore ce que je veux exactement.
Le résultat le plus proche ce fajit grâce à ça.

/^\thost_name/ h {
/}/ !{
/^\tcheck_command/H;s/\n;/
/^\tplugin_output/ {
H
g
s/\n/;/
s/\t//gp
d
}
}
}


merci d'avance
0
padowan Messages postés 21 Date d'inscription lundi 14 janvier 2008 Statut Membre Dernière intervention 21 février 2008 3
19 févr. 2008 à 11:18
merci encore , ça marche , j'espère pouvoir te rendre la pareil dans un autre domaine un jour.
0