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

  1. #21
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    Donc, on se résume. Voici un fichier pour lequel :
    • on ne peut pas se caler sur les "=" puisque des valeurs ont des = en plein milieu.
    • on ne peut pas se caler sur les espaces, car les valeurs ont des espaces en plein milieu
    • Et en plus, la fin de ligne est en formattage windows : \r\n au lieu de \n

    Hé bé. . Je ne vois qu'une machine d'états pour régler le truc.
    • état 1 : on attend le header
    • état 2 : on attend la valeur
    • état 3 : on attend la fin de la protection par guillemets.


    Pour la fin de ligne on fait le traditionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i 's/\r$//' fichier.log
    Avec ou sans -i pour un changement définitif ou non.

    Après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F '' '{etat=1;header="";valeur=""; for (i=1;i<=NF;i++) if (etat==1) if ($i=="=") etat=2; else header=header""$i;else if (etat==2) if ($i==" ") {h[header]++;tab[NR,header]=valeur;header="";valeur="";etat=1;} else {valeur=valeur""$i;if ($i=="\"") etat=3;} else if (etat==3) {valeur=valeur""$i;if ($i=="\"") etat=2;}} END{n=asorti(h,s); for (i=1;i<=n;i++) printf("%s%s",s[i],((i==n)?"\n":","));for (l=1;l<=NR;l++) for (i=1;i<=n;i++) printf("%s%s",tab[l,s[i]],((i==n)?"\n":",")); }'
    Pour avoir balancé le résultat dans LibreOffice, cela semble marcher. Malgré les problèmes identifiés plus haut.

  2. #22
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    gawk fonctions de chaînes

    n'y a-t-il pas moyen d'installer GNUawk sur WSL ?
    ça fonctionne...
    merci !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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