Utilisation de AWK : runaway string constant

Résolu
pcsystemd Messages postés 734 Statut Membre -  
pcsystemd Messages postés 734 Statut Membre -
Bonjour,

J'ai un fichier qui contient les entrées suivantes séparées par un tube | :

toto@mail.com|titi@mail.com|tutu@free.fr|titul@gmail.com| etc..


Je souhaiterais en sortie cela :

insert into ma_table(crted_a,recer,opt,reaon,teme_id) select '2018-07-11','toto@mail.com','','Message',id from ma_table where id in(select id from ma_table);
insert into ma_table(crted_a,recer,opt,reaon,teme_id) select '2018-07-11','titi@mail.com','','Message',id from ma_table where id in(select id from ma_table);
etc..


J'ai donc utilisé AWK avec la commande suivante :

awk -F \| -v Q=\' '{ prov=($1~/^ *$/)?"":prov;printf ("insert ma_table(created_t,recver,option,reason,teate_id) select '2018-07-11','%s','','message',id from ma_table2 where id in(select id from ma_table3);", Q $1 Q) }' fichier.txt 


Mais j'ai l'erreur suivante :

awk: line 1: runaway string constant "insert int ...


Merci pour votre aide.



--
L'accès au savoir est la première liberté que chaque homme devrait avoir.

3 réponses

  1. Utilisateur anonyme
     
    salut,

    ce ne serait pas les apostrophes qui font échouer la commande ?
    remplace-les par
    '\''

    =>
    awk 'cmd'\''autre'\''chose'

    parce que chaque apostrophe ouvre et ferme la commande awk.
    0
  2. UnGnU Messages postés 1468 Statut Contributeur 158
     
    Salut,

    $ cat foo.sh
    #! /bin/bash

    while read -d '|' line
    do
    echo "insert into ma_table(crted_a,recer,opt,reaon,teme_id) select '2018-07-11','${line}','','Message',id from ma_table where id in(select id from ma_table);"
    done <fich


    $ cat fich
    toto@mail.com|titi@mail.com|tutu@free.fr|titul@gmail.com|


    $ ./foo.sh
    insert into ma_table(crted_a,recer,opt,reaon,teme_id) select '2018-07-11','toto@mail.com','','Message',id from ma_table where id in(select id from ma_table);
    insert into ma_table(crted_a,recer,opt,reaon,teme_id) select '2018-07-11','titi@mail.com','','Message',id from ma_table where id in(select id from ma_table);
    insert into ma_table(crted_a,recer,opt,reaon,teme_id) select '2018-07-11','tutu@free.fr','','Message',id from ma_table where id in(select id from ma_table);
    insert into ma_table(crted_a,recer,opt,reaon,teme_id) select '2018-07-11','titul@gmail.com','','Message',id from ma_table where id in(select id from ma_table);


    ;-)
    0
  3. pcsystemd Messages postés 734 Statut Membre 23
     
    Merci à vous deux.

    Effectivement les apostrophes foutaient le bazar!

    Merci UnGnU pour ta solution.
    0