Rechercher : dans
Par :

Script shell, modification de fichiers (.csv)

Dernière réponse le 19 fév 2008 à 11:18:22 padowan, le 18 fév 2008 à 10:48:33 
 Signaler ce message aux modérateurs

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 .

Configuration: Windows XP
Firefox 2.0.0.12

Meilleures réponses pour « Script shell, modification de fichiers (.csv) » dans :
[Python] Lire et écrire des fichiers CSV VoirLIRE ET ÉCRIRE DES FICHIERS CSV Python www.python.org, dans sa version 2.4 supporte de facto le format CSV (comma-separated values: valeurs séparées par des virgules). La Library Reference est certes très explicative à ce sujet, mais uniquement...
Excel - Convertir fichier(s) CSV / XLS VoirComme dit dans le titre, cette application convertit des fichiers CSV en fichiers XLS N’est pas nécessaire pour Excel 2007, ce dernier faisant la conversion automatiquement La conversion n’ayant pas de mise en forme, en cas de modification...
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha...
Fichier CSV VoirFormat CSV Un fichier CSV est un fichier tableur, contenant des données sur chaque ligne séparés par un caractère de séparation (généralement une virgule ou un point-virgule). Comment lire un fichier CSV ? Il peut être lu avec un tableur tel que...

1

jipicy, le 18 fév 2008 à 10:54:56
  • +1

Salut,

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

Merci ;-)
Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

2

padowan, le 18 fév 2008 à 11:22:18

Voilà le lien ,

Merci de prendre encor du temps pour moi

http://cjoint.com/data/cslvk1iQbP.htm

Répondre à padowan

3

jipicy, le 18 fév 2008 à 11:41:36

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}}}'
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

8

jipicy, le 18 fév 2008 à 18:11:56
  • +1

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
        }
    }
}
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

4

padowan, le 18 fév 2008 à 14:05:25

Merci beaucoup Jicipy, c'est rare de trouver des gens aussi patient et serviable sur les forums de nos jours.

Répondre à padowan

5

jipicy, le 18 fév 2008 à 14:10:49

Non je ne suis pas le dernier des Mohicans ;-))

Au fait, ça marche ou pas ?

Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

7

padowan, le 18 fév 2008 à 17:23:37

Oui ça marche très bien , encore merci

Répondre à padowan

9

padowan, le 19 fév 2008 à 10:47:25

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

Répondre à padowan

10

jipicy, le 19 fév 2008 à 11:08:49
  • +1

sed -n '/^\thost_name/h;{/}/!{/^\tcheck_command/H;/^\tplugin_output­/{H;g;s/\n/;/g;s/\t//gp;d}}}'
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

11

 padowan, le 19 fév 2008 à 11:18:22

Merci encore , ça marche , j'espère pouvoir te rendre la pareil dans un autre domaine un jour.

Répondre à padowan
Collection CommentÇaMarche.net