Script shell, modification de fichiers (.csv)
padowan
Messages postés
21
Statut
Membre
-
padowan Messages postés 21 Statut Membre -
padowan Messages postés 21 Statut Membre -
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 .
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:
- Script shell, modification de fichiers (.csv)
- Suivi de modification word - Guide
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Explorateur de fichiers - Guide
- Renommer des fichiers en masse - Guide
8 réponses
Salut,
Peux-tu mettre sur Cjoint ton fichier ".dat" (ou une partie tout au moins si c'est possible bien entendu...).
Merci ;-)
Peux-tu mettre sur Cjoint ton fichier ".dat" (ou une partie tout au moins si c'est possible bien entendu...).
Merci ;-)
sed -n '/^\thost_name/h;{/}/!{/^\tcheck_command/H;/^\tplugin_output/{H;g;s/\n/;/g;s/\t//gp;d}}}';-))
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 (^)) :
Édit : Et rajoute ça pour supprimer les tabulations :
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}}}';-))
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
}
}
};-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci beaucoup Jicipy, c'est rare de trouver des gens aussi patient et serviable sur les forums de nos jours.
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
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