IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

sed / awk LOG vers CSV


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut sed / awk LOG vers CSV
    Bonjour,

    Je souhaite transformer un fichier log en fichier CSV.

    fichier log :
    id=firewall time="2013-09-03 19:30:06" fw="TONTON" tz=+0200 startime="2013-09-03 19:30:04" pri=5 proto=smtp user=titi@titi.com src=5.39.15.102 dst=178.201.80.83 spamlevel=0 action=block dstname=aaaa@aaaa.fr msg="Connection interrupted"

    id=firewall time="2013-09-13 19:30:06" fw="TONTON" tz=+0200 startime="2013-19-03 19:30:04" pri=5 proto=smtp user=tata@tata.com src=17.18.19.102 dst=178.201.80.83 spamlevel=0 action=block dstname=bbbbb@aaaa.fr msg="Connection interrupted"
    J'ai cette commande (pour le moment) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -re 's/ [^=]+=/,/g' avant.log > apres.csv
    qui ne marche pas avec les valeurs délimitées par des " comme time="2013-09-03 19:30:06" D'après mes recherches, cela ressemble à des remplacements conditionnels mais je n'arrive pas à le faire.

    Pourriez-vous m'aider à obtenir le résultat suivant ?
    firewall,2013-09-03 19:30:06,TONTON,+0200,2013-09-03 19:30:04,5,smtp,titi@titi.com,5.39.15.102,178.201.80.83,0,block,aaaa@aaaa.fr,Connection interrupted
    Merci d'avance

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 298
    Points : 12 778
    Points
    12 778
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -re 's/^[^=]*=| [^ ]*=/,/g;s/^,|"//g' avant.log > apres.csv
    Cordialement.

  3. #3
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Vous êtes un expert disedorgue !
    Merci beaucoup. Ta commande marche très bien.

    Cependant je me suis rendu compte (grâce à ton script qui me permet d'ouvrir le fichier CSV dans LibreOffice) que sur certaines lignes du fichier log, il manque plusieurs colonnes.
    Du coup, j'ai l'impression que je vais devoir pondre un sed gérant colonne après colonne...

    ...à moins d'avoir une idée !?

  4. #4
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Est-il possible de "dire" à sed par exemple :
    - la valeur <time> va en 1ère colonne
    - la valeur <user> va en 2ème colonne (après le 1er ",")
    - la valeur <dstname> va en 3ème colonne (après le 2ème ",")
    ???

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 298
    Points : 12 778
    Points
    12 778
    Par défaut
    Oui, c'est possible, mais il faut faire de la capture d'arguments et en sed, on ne peut pas dépasser les 9 arguments.
    Je pense que dans ton cas, awk serait plus adapté avec au pire un premier filtre en sed (quoi que l'on peut le faire avec awk).
    Il faudrait que tu fournisses un input et un output plus fourni déjà pour résoudre ton problème de colonnes manquantes.
    Cordialement.

  6. #6
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    admettons que 9 colonnes me suffit...

    Pourrais-tu STP me montrer un exemple de capture d'arguments basé sur mon précédent post ?

    Si besoin j'afficherai un résumé du fichier log avec les quelques cas particuliers.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. awk fichier plat vers csv
    Par jadey dans le forum Shell et commandes GNU
    Réponses: 22
    Dernier message: 27/10/2009, 14h37
  2. DoCmd.OutputTo vers .csv
    Par Décibel dans le forum Access
    Réponses: 4
    Dernier message: 23/06/2008, 14h20
  3. transformation fichier log vers XML
    Par natacha79 dans le forum Logging
    Réponses: 2
    Dernier message: 09/06/2006, 13h07
  4. tableau HTML vers CSV
    Par obelix dans le forum Langage
    Réponses: 6
    Dernier message: 09/11/2005, 23h51
  5. [VBA-E] macro conversion excel vers csv
    Par baboune dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/07/2004, 09h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo