Forum Programmation.shell Créer une floppée de commandes sql depuis un fichier texte...

Posté par  .
Étiquettes : aucune
0
3
mai
2006
Hello à vous, ô pros du shell !
Je vous préviens de suite : ce qui suit n'est pas un TP, j'ai fini mes cours depuis longtemps !
J'ai fait une boulette, et au lieu d'avoir une requête update lancée comme il faut, j'ai un 'not' qui a foutu le bordel dans une de mes tables.
J'ai bien des sauvegardes, mais elles récupèrent toute la base, et pas uniquement les quelques lignes que j'ai bronsonisées....
Aussi, je me tourne vers vous pour résoudre ce qui vous semblera certainement bénin.
J'ai un fichier qui se compose de lignes sous la forme suivante :
75, '2005-09-14', true, 1, true, '08:30:00', '12:15:00', 225, 'Aucune'
75, '2005-09-14', false, 1, true, '13:30:00', '17:30:00', 240, 'Aucune'
...

Ces lignes sont répétées à l'envi. Il ne faudrait récupérer que les lignes qui ont le 3ème champ à true, et les reformatter sous cette forme :
update table set ch1 = '08:30:00', ch2 = '12:15:00', ch3 = 'Aucune' where ch4 = 75 and ch5 = true and ch6 = '2005-09-14';

Le true en face de ch5 correspond au champs 3 cité plus haut. Pour les curieux, c'est un boolean qui indique true = matin, false = après-midi.
Evidement, on doit pouvoir faire ça avec awk (gawk). Mais comme je n'en connais que le nom, je suis un peu dans la panade avec cette histoire....
D'avance merci pour votre aide bien précieuse !
  • # awk

    Posté par  . Évalué à 4.

    awk -F ', ' '{if ($3 == "true") { print "update table set ch1 = " $6 ", ch2 = " $9 " where ch4= " $1 "and ch5 = true and ch6 = " $2 }}'


    Dam
  • # awk ton deuxième meilleur ami

    Posté par  . Évalué à 3.

    cat ton_fichier | awk -F',' '{ 
    
    if ( $3 = true ) { 
    printf(" update table set ch1=%s, ch2=%s, ch3=%s where ch4=%s and ch5=%s and ch6=%s;\n", $6 $7 $9 $1 $3 $2) 
    } 
    
    }'
    
    La sortie doit contenir les requêtes, que tu peux rediriger dans un fichier puis ensuite le lancer avec ton interpréteur sql. Le code n'est pas testé donc bon, je garantie pas qu'il marche du premier coup, mais en gros c'est l'idée.
  • # Sauvegardes

    Posté par  (site web personnel) . Évalué à 2.

    Pourquoi ne pas utiliser tes sauvegardes?
    Si c'est un dump SQL normal suffit de récuperer la bonne table, c'est franchement plus simple.. .(surtout quand on y connait rien en scriptig comme moi (et toi visiblement :))
    • [^] # Re: Sauvegardes

      Posté par  . Évalué à 3.

      Hum... J'ai dû (encore) mal m'exprimer....
      Justement, l'extrait de fichier est tiré de mes sauvegardes. Pour éclaircir la chose : je n'allais pas restaurer la base complète pour une partie des heures de pointage d'un agent qui sont parties en vrilles suite à une erreur de ma part.
      Par ailleurs, la restauration complète m'aurait fait perdre une journée de travail pour tout le monde....
      Enfin, je ne pouvais pas faire un delete/insert sur cette table pour les lignes concernées pour cet agent, car cette table est bourrée de triggers, et je suis pratiquement que le remède aurait été pire que le problème dans ce cas particulier....
      En tout cas, mon problème est réglé, c'est le principal !
      • [^] # Re: Sauvegardes

        Posté par  . Évalué à 1.


        je n'allais pas restaurer la base complète pour une partie des heures de pointage d'un agent (...)


        Par simple curiosité de ma part, les types pointent sur une appli informatique ?
        • [^] # Re: Sauvegardes

          Posté par  . Évalué à 2.

          Oui, tout juste.
          C'est basé sur la bonne foi et l'honnêteté des gens (mouarf). C'est une application que j'ai développé en php. Elle s'appuie sur une base de données postgreSQL, ainsi que sur LaTeX pour la génération des documents.
          Voilà...
  • # Réponse groupée :

    Posté par  . Évalué à 2.

    Merci à tous les 2. J'ai utilisé la réponse de Damien, car elle me semblait plus courte.
    En fait, awk, c'est vraiment de la balle ! Je vais me pencher sérieusement sur la doc !
    En tout cas, mon pb est réglé, je vais pouvoir retourner dormir tranquille !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.