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. #1
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    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 confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 361
    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 361
    Par défaut
    Bonjour,

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

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    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 éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    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 confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 361
    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 361
    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.

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    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.

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 361
    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 361
    Par défaut
    Un exemple de cas ou l'on ne connait pas la position du champs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     sed -re '
    s/([^ ]*=)/,\1/g
    s/(.*)(,dstname=[^,]+)(.*)/\2\1\3/
    s/(.*)(,user=[^,]+)(.*)/\2\1\3/
    s/(.*)(,time=[^,]+)(.*)/\2\1\3/
    s/ *,[^=]+=/,/g
    s/^,|"//g' fichier
    s/([^ ]*=)/,\1/g ==> on ne fait que créer le séparateur de champs ",".
    s/(.*)(,dstname=[^,]+)(.*)/\2\1\3/ ==> on positionne le champs dstname en première position.
    s/(.*)(,user=[^,]+)(.*)/\2\1\3/ ==> on positionne le champs user en première position (donc dstname passera en deuxième position.
    s/(.*)(,time=[^,]+)(.*)/\2\1\3/ ==> time en 1er donc user en 2eme et dstname en 3eme.
    s/ *,[^=]+=/,/g ==> on retire le nom du champs (nom=).
    s/^,|"//g ==> on retire la "," du début de ligne et tous les guillemets.

  8. #8
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    Bon... mon fichier log ne me facile pas beaucoup la tâche...

    Je me rend également compte qu'il n'y a pas toujours le <dstname> (=email de destination> ! du coup, ta commande ne fonctionne pas à 100%

    autre problème : j'ai rajouté s/(.*,dstname=[^,]+)(.*)/\1/ pour supprimer les colonnes inutiles (après <dstname>)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sed -re '
    s/([^ ]*=)/,\1/g
    s/(.*)(,dstname=[^,]+)(.*)/\2\1\3/
    s/(.*)(,user=[^,]+)(.*)/\2\1\3/
    s/(.*)(,time=[^,]+)(.*)/\2\1\3/
    s/(.*,dstname=[^,]+)(.*)/\1/
    s/ *,[^=]+=/,/g
    s/^,|"//g' test.log > test.csv
    De plus, j'aimerai garder <msg> (après <dstname>) mais les valeurs sont délimitées par " et des fois il y a la sous-chaine "from=" et "to=" (correspondant au motif des colonnes !!!! Il faut donc soit empêcher la première opération de sed DANS une chaine délimitée par ".." soit sortir from= et to=
    J'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sed -re '
    s/([^ ]*|[^from]*|[^to]*=)/,\1/g
    s/(.*)(,msg="[^,]+")/\2\1/
    s/(.*)(,dstname=[^,]+)(.*)/\2\1\3/
    s/(.*)(,user=[^,]+)(.*)/\2\1\3/
    s/(.*)(,time=[^,]+)(.*)/\2\1\3/
    s/(.*,msg=[^,]+)(.*)/\1/
    s/ *,[^=]+=/,/g
    s/^,|"//g' test.log > test.csv
    mais évidemment cela ne marche pas.

    Pas facile tout ça...

    Si tu as encore le courage de m'aider, je joins un fichier log.

    Merci d'avance...
    Fichiers attachés Fichiers attachés

  9. #9
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Ca le fait ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    awk '
    {
      columns=split($0,value,"[a-zA-Z0-9_-]+=",label);
      for(i=1;i<columns;i++)
      {
        sub("=$","",label[i]);
        sub("[\"]?[ \r]$","",value[i+1]);
        sub("^\"","",value[i+1]);
        if(NR==1) {
          printf("%s%s",label[i],i==columns-1?"":",");
          c[i]=label[i];
        }
        v[label[i]]=value[i+1];
      }
      if(NR==1) { nc=columns; printf("\n"); }
      for(i=1;i<nc;i++)
      {
        printf("%s%s",v[c[i]],i==nc-1?"":",");
        v[c[i]]="?";
      }
      printf("\n");
    }
    ' test.log

  10. #10
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 361
    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 361
    Par défaut
    Au moins, tu lui alignes les champs, mais moi j'avais compris qu'il voulait garder les from=... to=... (le message complet en fait), pour le faire,un petit substitue du "=" pour ' from=' et ' to=' avant puis rétablissement de celui-ci après.
    Sinon, son séparateur "," ne fonctionnera pas bien pour la ligne 258 car dans le message il y a une ",":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id=firewall time="2013-09-05 05:29:34" fw="CLIENT" tz=+0200 startime="2013-09-05 05:29:32" pri=5 proto=smtp contentpolicy=1 ruleid=11 user=bounce@dolce-life.fr src=5.39.12.227 srcport=51509 srcportname=ephemeral_fw_tcp dst=172.20.0.200 dstport=25 dstportname=smtp modsrc=5.39.12.227 modsrcport=51509 origdst=13.13.13.13 origdstport=25 sent=118 rcvd=239 duration=0.25 spamlevel=0 action=block dstname=secret_dir_general@xxxxx.com msg="Dataline too long, the proxy cannot handle such a long line !"
    A priori, il n'y a pas de ";" (du moins dans le fichier fourni).
    Il manque aussi la suppression du guillemet final.

  11. #11
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Garder les labels des champs dans chaque ligne n'est pas logique/standard pour un fichier csv. Normalement, c'est la première ligne qui définit le nom des colonnes.

    J'ai modifié le script pour que l'on puisse définir le séparateur que l'on souhaite.

    Je n'avais pas rencontré de problème avec le guillemet final et le fichier transmis. Tu as probablement du le convertir au format unix. Je traite quand même maintenant les deux formats.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    awk -v separator=";" '
    {
      columns=split($0,value,"[a-zA-Z0-9_-]+=",label);
      for(i=1;i<columns;i++)
      {
        sub("=$","",label[i]);
        sub("[\"]?[ \r]?$","",value[i+1]);
        sub("^\"","",value[i+1]);
        re=sprintf(".*%s.*",separator);
        sub(re,"\"&\"",value[i+1]);
        if(NR==1) {
          printf("%s%s",label[i],i==columns-1?"":",");
          c[i]=label[i];
        }
        v[label[i]]=value[i+1];
      }
      if(NR==1) { nc=columns; printf("\n"); }
      for(i=1;i<nc;i++)
      {
        printf("%s%s",v[c[i]],i==nc-1?"":separator);
        v[c[i]]="?";
      }
      printf("\n");
    }
    '  test.log

  12. #12
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    VOUS ETES DES GRANDS MALADES !!!!

    Ce script awk me sera d'une grande utilité par la suite...

    J'ai malgré tout, le besoin d'apporter quelques modifications pour qu'il soit parfait pour mon utilisation...

    1/ Comme l'a souligné disedorgue, la valeur <msg> à la ligne time="2013-09-03 20:10:00" est tronquée à cause des from= et to=

    2/ la valeur <msg> à la ligne time="2013-09-05 05:29:34" est tronquée à cause de la , "Dataline too long, the proxy cannot handle such a long line !"

    3/ la valeur <user> "bounce-id=D247=U55138.mailplan.ovh.net=1378320126347210101@55.mail-out.ovh.net" à la ligne time="2013-09-05 04:53:06" n'est pas prise en compte.... surement à cause du caractère =

    4/ comme tu l'as précisé jlliagre, les entêtes du tableau sont construites à partir de la première ligne... ce qui pose problème lorsque cette première ligne n'est pas complète. En effet, il manque le champ <virus>. J'ai donc pour mon test, rajouté en première ligne :
    id= time="" fw="" tz= startime="" pri= proto= contentpolicy= ruleid= user= src= srcport= srcportname= dst= dstport= dstportname= modsrc= modsrcport= origdst= origdstport= sent= rcvd= duration= spamlevel= virus= action= dstname= msg=""
    Y a-t-il possibilité de palier à ce problème ?

    En tout cas encore un grand merci pour votre aide... je vais essayer d'en apprendre en un peu sur l'utilisation d'awk

  13. #13
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par Tchupacabra Voir le message
    [COLOR="Green"]1/ Comme l'a souligné disedorgue, la valeur <msg> à la ligne time="2013-09-03 20:10:00" est tronquée à cause des from= et to=
    Ok, je n'avais pas compris.
    2/ la valeur <msg> à la ligne time="2013-09-05 05:29:34" est tronquée à cause de la , "Dataline too long, the proxy cannot handle such a long line !"
    Je n'observe pas ce problème.
    3/ la valeur <user> "bounce-id=D247=U55138.mailplan.ovh.net=1378320126347210101@55.mail-out.ovh.net" à la ligne time="2013-09-05 04:53:06" n'est pas prise en compte.... surement à cause du caractère =
    Ouch, il y aussi des "=" dans des champs sans guillemets. Pas coton ton fichier de logs ...
    4/ comme tu l'as précisé jlliagre, les entêtes du tableau sont construites à partir de la première ligne... ce qui pose problème lorsque cette première ligne n'est pas complète. En effet, il manque le champ <virus>. J'ai donc pour mon test, rajouté en première ligne :
    Y a-t-il possibilité de palier à ce problème ?
    Bien sûr, il suffit de faire une première passe juste pour extraire tout les noms.

    Les autres problèmes décrits plus haut (1,2 et 3) doivent être gérés avec cette nouvelle version:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    awk -v separator="${2:-,}" '
    {
      re="=[^ ]+=[^ ]+"
      if($0 ~ re)
      {
        b=split($0,regular,re,oops);
        $0="";
        for(i=1;i<b;i++) {
          oops[i]=substr(oops[i],2);
          gsub("=","%%%%",oops[i]);
          $0=$0 regular[i] "=" oops[i];
        }
        $0=$0 regular[b];
      }
      re="=\"[^\"]*=[^\"]*\""
      if($0 ~ re)
      {
        b=split($0,regular,re,oops);
        $0="";
        for(i=1;i<=b;i++) {
          oops[i]=substr(oops[i],2);
          gsub("=","%%%%",oops[i]);
          $0=$0 regular[i] "=" oops[i];
        }
        $0=$0 regular[b];
      }
      {
        columns=split($0,value,"[a-zA-Z0-9_-]+=",label);
        for(i=1;i<columns;i++)
        {
          sub("=$","",label[i]);
          sub("[\"]?[ \r]?$","",value[i+1]);
          sub("^\"","",value[i+1]);
          re=sprintf(".*%s.*",separator);
          sub(re,"\"&\"",value[i+1]);
          if(NR==1) {
            printf("%s%s",label[i],i==columns-1?"":",");
            c[i]=label[i];
          }
          gsub("%%%%","=",value[i+1]);
          v[label[i]]=value[i+1];
        }
        if(NR==1) { nc=columns; printf("\n"); }
        for(i=1;i<nc;i++)
        {
          printf("%s%s",v[c[i]],i==nc-1?"":separator);
          v[c[i]]="?";
        }
        printf("\n");
      }
    }
    ' ${1:-test.log}

  14. #14
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    bah encore bravo...

    dernier bug et j'arrête d’empiéter sur ton temps

    à chaque from= et to= la ligne suivante contient "=" en unique caractère.

    une idée ?
    encore un grand merci d'avance

  15. #15
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    awk -v separator="${2:-,}" '
    {
      re="=[^ ]+=[^ ]+"
      if($0 ~ re)
      {
        b=split($0,regular,re,oops);
        $0="";
        for(i=1;i<b;i++) {
          oops[i]=substr(oops[i],2);
          gsub("=","%%%%",oops[i]);
          $0=$0 regular[i]
          if(oops[i]) $0=$0 "=" oops[i];
        }
        if(regular[b]) $0=$0 regular[b]
      }
      re="=\"[^\"]*=[^\"]*\""
      if($0 ~ re)
      {
        b=split($0,regular,re,oops);
        $0="";
        for(i=1;i<=b;i++) {
          oops[i]=substr(oops[i],2);
          gsub("=","%%%%",oops[i]);
          $0=$0 regular[i]
          if(oops[i]) $0=$0 "=" oops[i];
        }
      }
      {
        columns=split($0,value,"[a-zA-Z0-9_-]+=",label);
        for(i=1;i<columns;i++)
        {
          sub("=$","",label[i]);
          sub("[\"]?[ \r]?$","",value[i+1]);
          sub("^\"","",value[i+1]);
          re=sprintf(".*%s.*",separator);
          sub(re,"\"&\"",value[i+1]);
          if(NR==1) {
            printf("%s%s",label[i],i==columns-1?"":",");
            c[i]=label[i];
          }
          gsub("%%%%","=",value[i+1]);
          v[label[i]]=value[i+1];
        }
        if(NR==1) { nc=columns; printf("\n"); }
        for(i=1;i<nc;i++)
        {
          printf("%s%s",v[c[i]],i==nc-1?"":separator);
          v[c[i]]="?";
        }
        printf("\n");
      }
    }
    ' ${1:-test.log}

  16. #16
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    Merci beaucoup jlliagre ! je suis comblé...


  17. #17
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    Bonjour Bonjour !

    je reviens sur le sujet après plusieurs années...
    J'ai longtemps utilisé ce script mais à présent il ne semble plus fonctionner à cause de l'utilisation de split()
    en effet à chaque ligne utilisant split() j'ai l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    awk: line 6: syntax error at or near ,
    awk: line 20: syntax error at or near ,
    awk: line 30: syntax error at or near ,
    Apparemment le 4ème paramètre est un problème.... ici : oops et label
    et je ne vois pas comment corriger ça... des idées ?

    Pour rappel le but de ce script est de générer un CSV à partir un fichier LOG qui ne contient pas d'entêtes, les champs ne sont pas toujours alignés et les valeurs de certains champs ne sont pas toujours entourés de "xxx"
    exemple :
    id=1 prenom=René age=61 job="Directeur général"
    id=2 prenom=Alphonse nom="Brown" age=33 job=Technicien
    Merci d'avance !

  18. #18
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    quelque chose aurait-il changé sur la distribution que tu utilises concernant ce vers quoi pointe awk (mawk, nawk, gawk...) ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  19. #19
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    certainement... j'ai changé de taf et maintenant j'exécute le script sur mon Windows 10 un Debian 11 WSL2 (Windows Subsystem for Linux).

    sinon auriez-vous un lien vers la doc de split() pour awk ?

  20. #20
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    gawk fonctions de chaînes

    n'y a-t-il pas moyen d'installer GNUawk sur WSL ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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