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 :

[GNU Sed] Faire un "one shot"


Sujet :

Shell et commandes GNU

  1. #1
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut [GNU Sed] Faire un "one shot"
    Salut tout le monde

    J'ai un petit truc perso à faire, et je pense que GNU Sed, avec votre aide, pourrait m'aider à gagner en temps de traitement.

    Voilà le tableau :

    Sur une plateforme Windows, j'ai une chaine alpha qui ressemble à ceci

    "type","date"
    et une autre, bêta, qui ressemble à ce qui suit
    "date=2005-10-26", "type=file", "level=3"
    Alpha représente le format à afficher, donc ça peut tout aussi bien être

    type; none;
    le tout insensible à la casse.

    L'objectif, comme vous l'avez deviné, c'est de remplir chaque champ de la chaine alpha avec les données correspondantes trouvées dans la chaine bêta, le cas échéant, par une chaine vide si la donnée n'existe pas.

    Jusqu'à présent, ce que je fais, c'est parcourir la chaine bêta et charger ses données dans le Shell sous forme de variable et ensuite procéder au remplacement dans la chaine alpha Je pense qu'il y a moyen de faire le tout en une seule fois, en une seule passe, le fameux "one shot" ça ou ça comme vous voulez

    Idéalement, je voudrais faire ça avec GNU Sed, mais j'ai aucune piste, au pire avec GNU Awk, mais je connais pratiquement pas.

    Voilà, j'espère avoir été complet et que cette gymnastique neuronale sera un exercice plaisant.

    Merci d'avance pour vos aides

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    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 430
    Par défaut
    Bonjour,

    Pas tout compris, peux-tu donner un exemple de 4 ou 5 lignes de tes 2 fichiers d'entrée et le fichier de sortie en résultant ?

  3. #3
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    ah salut disedorgue, merci,

    alors, mon objectif est le suivant, j'ai cette liste par exemple
    "date=2005-10-26", "type=file", "level=1"
    "date=2005-10-27", "type=file", "level=2"
    "date=2005-10-28", "type=file", "level=3"
    et je dois formater chaque ligne.

    si le format est "type";"date";, alors en sortie je devrais avoir
    "file";"2005-10-26";
    "file";"2005-10-26";
    "file";"2005-10-26";
    Si le format est type; date alors en sortie je devrais avoir
    file; 2005-10-26
    file; 2005-10-26
    file; 2005-10-26
    Si le format est system; date alors en sortie je devrais avoir
    ; 2005-10-26
    ; 2005-10-26
    ; 2005-10-26
    Merci encore.

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [neumann@MacBookPro ~]$ cat test.txt 
    "date=2005-10-26", "type=file", "level=1"
    "date=2005-10-27", "type=file", "level=2"
    "date=2005-10-28", "type=file", "level=3" 
    [neumann@MacBookPro ~]$ sed 's/.*date=\([0-9]*\-[0-9]*\-[0-9]*\).*type=\([a-z]*\).*/"\2";"\1"/g' test.txt 
    "file";"2005-10-26"
    "file";"2005-10-27"
    "file";"2005-10-28"
    Après on adapte légèrement en fonction du format de l'autre ligne et c'est réglé (sinon ça doit être faisable avec awk une fois)

    ?

    Idriss

  5. #5
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    salut ok.Idriss, merci

    Citation Envoyé par ok.Idriss
    Après on adapte légèrement en fonction du format de l'autre ligne et c'est réglé


    ce qu'il y a, c'est que le format c'est pas moi qui le choisi, on pourrait presque considérer qu'il est aléatoire, du coup, la commande de remplacement devrait être généré de manière dynamique, c'était la voie sur laquelle je m'étais engagé, mais je sais plus sur quel problème j'avais buté ce jour-là.

    ce qu'il y a de certain, c'est que les champs à remplacer c'est des mots qui peuvent contenir les symboles tiret du milieu et tiret bas, mais rien d'autres.

  6. #6
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    unix~$ cat test.dat
    "token1=t11","token2=t12"
    "token1=t21","token2=t22"
    avec awk:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    unix~$ awk -v liste=token1,token2 -f p.awk test.dat
    t11;t12;
    t21;t22;
    unix~$ awk -v liste=token1,system -f p.awk test.dat
    t11;;
    t21;;
    unix~$
    Le code awk:

    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
    BEGIN {
            max = split(liste,champs,",")
    }
     
    {
            gsub(/"/, "", $0)
    }
     
    {
            for (x = 1; x <= max; x++) {
                    deb = index($0, champs[x])
                    len = length(champs[x]) + 1
                    if (deb == 0) {
                            printf(";")
                    } else {
                            data=substr($0, deb + len, length($0))
                            len=index(data, ",")
                            if (len == 0) {
                                    printf("%s;", data)
                            } else {
                                    value=substr(data, 1, len - 1)
                                    printf("%s;", value)
                            }
                    }
        }
            print ""
    }

  7. #7
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    salut noooop,

    On est sur une bonne voie... je vais creuser en ce sens... merci...

    Aussi, pour conserver le format, je me demande s'il serait plus utile de matcher les champs un à un sans se soucier du délimiteur, genre, trouver la première chaine de caractère [sans espaces, guillemets] dans "liste", matcher la valeur correspondante dans la première ligne de données, procéder au remplacement dans "liste" du champ en question par la donnée qui lui correspond, passer au champ suivant, etc. Qu'est-ce que vous pensez (tout le monde) de cette approche ? Où voyez-vous quelque chose qui serait plus optimal ?

  8. #8
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Citation Envoyé par minnesota Voir le message
    salut noooop,

    On est sur une bonne voie... je vais creuser en ce sens... merci...

    Aussi, pour conserver le format, je me demande s'il serait plus utile de matcher les champs un à un sans se soucier du délimiteur, genre, trouver la première chaine de caractère [sans espaces, guillemets] dans "liste", matcher la valeur correspondante dans la première ligne de données, procéder au remplacement dans "liste" du champ en question par la donnée qui lui correspond, passer au champ suivant, etc. Qu'est-ce que vous pensez (tout le monde) de cette approche ? Où voyez-vous quelque chose qui serait plus optimal ?
    Tu pourrais aussi passer une chaine de formatage utilisée par un printf général du type:

    Cette chaine aurait la faculté
    1) de préciser le format de sortie (format selon les règles du printf)
    2) les chaines $1...$n indiquerait quel token doit être substitué. Exemple: $1 indique le premier token, $2 le deuxième etc.....

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ cat alpha
    "type","date","level"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ cat beta
    "date=2005-10-25", "type=file", "level=3"
    "date=2005-10-26", "type=directory", "level=3"
    "type=file", "date=2005-10-27", "level=100"
    "type=vide", "date=2005-10-27", "foo=bar"
    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
    $ cat gamma
    awk -F, '
    pass==1 {
      for(i=1;i<=NF;i++)
      {
        split($i,a,"=")
        gsub("[ \"]","",a[1])
        gsub("[ \"]","",a[2])
        l=tolower(a[1])
        column[l]=a[2]
      }
      for(c in label)
      {
        if(c>1) printf(";")
        printf("%s",column[label[c]])
        column[label[c]]=""
      }
      printf("\n")
    }
    pass==0 {
      for(i=1;i<=NF;i++) {
        l=tolower($i)
        gsub("\"","",l)
        label[i]=l
      }
      pass=1
    }' alpha beta
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ ./gamma
    file;2005-10-25;3
    directory;2005-10-26;3
    file;2005-10-27;100
    vide;2005-10-27;

  10. #10
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    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 430
    Par défaut
    Une version sed (à déconseillée aux ames sensible ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat l1.txt
    "date=2005-10-26", "type=file", "level=1"
    "date=2005-10-27", "type=file", "level=2"
    "date=2005-10-28", "type=file", "level=3"
    Le code sed en lui-même:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    s/$/;/
    x
    s/^/s%^%ICI%/p
    x
    :deb
    h
    s/\("*\)\([^;"]*\)\("*\);.*$/\/\2\/!s%ICI%;ICI%;\/\2\/s%ICI.*"\1\2\3=\\([^"]*"\\).*%"\\1;\&%/
    /""/!s/$/;s%"\\([^"]*\\)";ICI%\\1;ICI%/
    /""/s/"\(["=]\)/\1/g
    p
    x
    s/[^;]*;*//
    /^$/!bdeb
    s/^/s%;ICI.*%%/p
    Et s'execute comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo 'tyupe;type;date;type;level' | sed -n -e 's/$/;/;x;s/^/s%^%ICI%/p;x;:deb;h;s/\("*\)\([^;"]*\)\("*\);.*$/\/\2\/!s%ICI%;ICI%;\/\2\/s%ICI.*"\1\2\3=\\([^"]*"\\).*%"\\1;\&%/;/""/!s/$/;s%"\\([^"]*\\)";ICI%\\1;ICI%/;/""/s/"\(["=]\)/\1/g;p;x;s/[^;]*;*//;/^$/!bdeb;s/^/s%;ICI.*%%/p'| sed -f - l1.txt
    ;file;2005-10-26;file;1
    ;file;2005-10-27;file;2
    ;file;2005-10-28;file;3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo 'type;"date";type;level' | sed -n -e 's/$/;/;x;s/^/s%^%ICI%/p;x;:deb;h;s/\("*\)\([^;"]*\)\("*\);.*$/\/\2\/!s%ICI%;ICI%;\/\2\/s%ICI.*"\1\2\3=\\([^"]*"\\).*%"\\1;\&%/;/""/!s/$/;s%"\\([^"]*\\)";ICI%\\1;ICI%/;/""/s/"\(["=]\)/\1/g;p;x;s/[^;]*;*//;/^$/!bdeb;s/^/s%;ICI.*%%/p'| sed -f - l1.txt
    file;"2005-10-26";file;1
    file;"2005-10-27";file;2
    file;"2005-10-28";file;3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo 'type;"date";level' | sed -n -e 's/$/;/;x;s/^/s%^%ICI%/p;x;:deb;h;s/\("*\)\([^;"]*\)\("*\);.*$/\/\2\/!s%ICI%;ICI%;\/\2\/s%ICI.*"\1\2\3=\\([^"]*"\\).*%"\\1;\&%/;/""/!s/$/;s%"\\([^"]*\\)";ICI%\\1;ICI%/;/""/s/"\(["=]\)/\1/g;p;x;s/[^;]*;*//;/^$/!bdeb;s/^/s%;ICI.*%%/p'| sed -f - l1.txt
    file;"2005-10-26";1
    file;"2005-10-27";2
    file;"2005-10-28";3
    Bonne lecture...

  11. #11
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    salut tout le monde,



    merci beaucoup pour vos réponses

    Un gros bravo pour la dernière que j'aimerais bien voir maximaliser comme qui dirait. Au passage, pour ceux qui sont sur Windows, comme le script est destiné à cette platforme, notez que le modulo est un métacaractère, donc pour pouvoir tester le script, il faut échapper le modulo en le dédoublant ou passer par un script sed.

    Je ferais des scripts de tests, et on choisira ensemble ou fera ensemble ce qu'il y a de plus optimal pour gnu awk et gnu sed. L'acquisition des données se faisant à partir de flux, idéalement, la forme de test devrait être cat pseudo_flux | awk_OR_sed ...., bien sûr, rien n'empêche de passer par des fichiers temporaires, mais si on peut éviter, c'est un plus.

    En ce qui me concerne, je me suis essayé à awk ce midi, y'a certainement des détails à revoir ou des coquilles qui seraient dues aux subtilités d'un awk que je ne connais pas, donc je compte sur vous pour les mettre en lumières.

    J'ai mis les fins de ligne au format Unix, je sait pas si c'est encore indispensable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ cat pseudo_flux.txt
    "date=2005-10-26", "type=file", "level=1", "file=x11"
    "date=2005-10-27", "type=file", "level=2", "file=x22"
    "date=2005-10-28", "type=file", "level=3", "file=x33"
    "date=2005-10-29", "type=file", "level=4", "file=x44"
    "date=2005-10-30", "type=file", "level=5", "file=x55"
    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
    $ cat awk_one_shot
    BEGIN {
      #.@Note: prefix for avoiding a potential cyclic substitution in body gsub step
      prefix= "object@"
      fields_format= ENVIRON[output_model]
      if (!fields_format)
        exit 1
      IGNORECASE= 1  
      reg_exp= "[^;,[:blank:]\x22\x27]+"
      gsub(reg_exp, prefix "&", fields_format) 
    }
     
    {
      #.@Note: alterable variables
      tmp_format= fields_format
      tmp_output= fields_format
     
      print_output= 0
     
      while (match(tmp_format, reg_exp)) {
        field_loop= substr(tmp_format, RSTART, RLENGTH)
        tmp_format= substr(tmp_format, RSTART + RLENGTH)
        field_objet= substr(field_loop, length(prefix) + 1)
        field_value=""
        if (match($0, field_objet "=[^\x22]+"))
          field_value= substr(substr($0, RSTART, RLENGTH), length(field_objet) + 2)
        gsub(field_loop, field_value, tmp_output)
        print_output= 1
      }
     
      if (print_output)
        if (tmp_output)
          print tmp_output
    }
    sur win
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    > set "output_format="type";"  undefined  ";"date";"file""
    > type  pseudo_flux.txt| awk -v output_model="output_format" -f awk_one_shot
    "file";"  ";"2005-10-26";"x11"
    "file";"  ";"2005-10-27";"x22"
    "file";"  ";"2005-10-28";"x33"
    "file";"  ";"2005-10-29";"x44"
    "file";"  ";"2005-10-30";"x55"
    sur unix; ça donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ export output_format='"type";"  undefined  ";"date";"file"'
    $ cat pseudo_flux.txt| awk -v output_model="output_format" -f awk_one_shot
    "file";"  ";"2005-10-26";"x11"
    "file";"  ";"2005-10-27";"x22"
    "file";"  ";"2005-10-28";"x33"
    "file";"  ";"2005-10-29";"x44"
    "file";"  ";"2005-10-30";"x55"
    encore merci

  12. #12
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    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 430
    Par défaut
    Citation Envoyé par minnesota Voir le message
    Un gros bravo pour la dernière que j'aimerais bien voir maximaliser comme qui dirait. Au passage, pour ceux qui sont sur Windows, comme le script est destiné à cette platforme, notez que le modulo est un métacaractère, donc pour pouvoir tester le script, il faut échapper le modulo en le dédoublant ou passer par un script sed.
    Ou il suffit de remplacer les modulo par n'importe quel autre caractère tant que c'est toujours le même...
    J'ai juste mis des modulo pour une meilleur lisibilité, si j'avais utilisé le caratère standard qui est le "/" il aurait fallut que je l'échappe à chaque fois...
    Sinon, pour ma part, j'utiliserais plutot awk que sed (que j'ai fait comme qui dirait pour m'amuser...)

  13. #13
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Sinon, pour ma part, j'utiliserais plutot awk que sed (que j'ai fait comme qui dirait pour m'amuser...)
    Alors, va pour awk, en tout cas t'as fait un bel exercice, mais je ne désespère pas de voir une version sed parce que c'est beau

    merci

    je laisse les deux retardataires à qui aussi je me suis habitué ici apporter leurs contributions,
    après je mets le

    Edit:

    Ah quand on parle du loup

  14. #14
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    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 430
    Par défaut
    Voici une version fonctionnel en sed beaucoup plus simple que la première version (et qui conserve le format demander):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ cat l2.sed
    s/\([^[:alnum:]]*\)\([[:alnum:]]*\)/\/\2\/!s\/_ICI_.*\/\1\&\/;\/\2\/s\/_ICI_.*"\2=\\([^"]*\\)".*\/\1\\1_ICI_\&\/;/g
    s/^/s\/^\/_ICI_\/;/
    s/\/\/s\/.*//
    s/\/\/!//
    s/$/s\/_ICI_.*\/\//
    Voici des exemples de ce que cela donne
    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
    $ echo '"type";  titi  ;date;toto' | sed -f l2.sed | sed -f - l1.txt
    "file";    ;2005-10-26;
    "file";    ;2005-10-27;
    "file";    ;2005-10-28;
    $ echo '"type";  level  ;date;toto' | sed -f l2.sed | sed -f - l1.txt
    "file";  1  ;2005-10-26;
    "file";  2  ;2005-10-27;
    "file";  3  ;2005-10-28;
    $ echo '"type";  "level"  ;date;toto' | sed -f l2.sed | sed -f - l1.txt
    "file";  "1"  ;2005-10-26;
    "file";  "2"  ;2005-10-27;
    "file";  "3"  ;2005-10-28;
    $ echo '"type",  "level"  ,date' | sed -f l2.sed | sed -f - l1.txt
    "file",  "1"  ,2005-10-26
    "file",  "2"  ,2005-10-27
    "file",  "3"  ,2005-10-28
    $ echo '"type",  "level"  ,date:;' | sed -f l2.sed | sed -f - l1.txt
    "file",  "1"  ,2005-10-26:;
    "file",  "2"  ,2005-10-27:;
    "file",  "3"  ,2005-10-28:;

  15. #15
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Je savais que tu ne t'arrêterais pas en si bon chemin, merci disedorgue
    Un autre grand merci à ok.Idriss, noooop, jlliagre pour votre contribution

    Grâce à vous j'ai de quoi faire et j'ai pu découvrir en même temps awk

    Encore merci

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

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