Forum Programmation.shell lire et interpreter un fichier ligne par ligne

Posté par  .
Étiquettes : aucune
0
31
oct.
2006
Hello

j'ai un fichier du genre

date_arg1_arg2_arg3_arg4
date_arg1_arg2_arg3_arg4
date_arg1_arg2_arg3_arg4
date_arg1_arg2_arg3_arg4

et je souhaite le parcourir et l'interprêter de manière à faire de chaque ligne une requete mysql genre:
select arg1, arg2 from arg3 where arg4="bob" and date="2006-10-31";

Je suis sur une piste avec
---------------------------------

requete=`awk 'BEGIN {
FS="_"
RS="\n"
}

$5 = "Compression"{
print "mysql -u user -B -s -D MaBase -e \"select $2, $3 from $4;\"\n"
}' MonFichier.log`
$requete

--------------------------------

mais ça tente juste de m'exécuter une requete du type :
select arg1, arg2 from arg3 where arg4="bob" and date="2006-10-31";select arg1, arg2 from arg3 where arg4="bob" and date="2006-10-31";select arg1, arg2 from arg3 where arg4="bob" and date="2006-10-31";select arg1, arg2 from arg3 where arg4="bob" and date="2006-10-31";

Je touche au but mais je m'en sors pas...

Quelqu'un a une idée?
  • # quel est le problème ?

    Posté par  . Évalué à 1.

    Salut,
    Je ne vois pas bien quel est le problème. Il me semble que ce que tu veux obtenir est ce que tu obtiens...
    • [^] # Re: quel est le problème ?

      Posté par  . Évalué à 1.

      En fait, ça me sort une string concaténée de toutes les requetes, et $requete exécute cettte concaténation.
      je souhaite exécuter une requete directement à chaque ligne et non pas une fois le fichier parcouru. (à moins qu'il y ait une meilleure solution...)

      en clair, je voufrais faire ça:
      $select arg1, arg2 from arg3 where arg4="bob" and date="2006-10-31";

      $select arg1, arg2 from arg3 where arg4="bob" and date="2006-10-31";

      $select arg1, arg2 from arg3 where arg4="bob" and date="2006-10-31";

      et non pas
      $select arg1, arg2 from arg3 where arg4="bob" and date="2006-10-31";select arg1, arg2 from arg3 where arg4="bob" and date="2006-10-31";select arg1, arg2 from arg3 where arg4="bob" and date="2006-10-31";select arg1, arg2 from arg3 where arg4="bob" and date="2006-10-31";

      Merci!
      • [^] # Re: quel est le problème ?

        Posté par  . Évalué à -1.

        system() au lieu de print ?
        • [^] # Re: quel est le problème ?

          Posté par  . Évalué à 1.

          Oh la vache merci!
          ça m'apprendra à ne pas savoir lire le man!

          En revanche ça me sort, en ayant enlevé les \ et \n:

          system(mysql -u user -B -s -D MaBase -e "select $2, $3 from $4;")

          ==>
          /bin/sh: 000select: command not found
          /bin/sh: 000select: command not found
          /bin/sh: 000select: command not found
          /bin/sh: 000select: command not found

          alors que ma commande
          $mysql -u user -B -s -D MaBase -e "select $2, $3 from $4;"
          fonctionne...
          • [^] # Re: quel est le problème ?

            Posté par  . Évalué à 2.

            moi je metterai system("mysql -u user -B -s -D MaBase -e 'select $2, $3 from $4;' ")
            les " permetteront le remplacement des $2 $3 $4 :)

            Il ne faut pas décorner les boeufs avant d'avoir semé le vent

            • [^] # Re: quel est le problème ?

              Posté par  . Évalué à 1.

              C'est résolu, et ça m'amène directement à un autre problème:

              system("mysql -u user -B -s -D MaBase -e \"select statut from matable where numero=4;\" ")
              fonctionne

              mais pas
              system("mysql -u user -B -s -D MaBase -e \"select statut from matable where nom='bob';\" ")
              où j'obtiens le message suvant:

              ERROR 1054 (42S22) at line 1: Unknown column 'bob' in 'where clause'
              ERROR 1054 (42S22) at line 1: Unknown column 'bob' in 'where clause'
              ERROR 1054 (42S22) at line 1: Unknown column 'bob' in 'where clause'
              ERROR 1054 (42S22) at line 1: Unknown column 'bob' in 'where clause'

              bref ça marche pour le numérique, mais pas pour les string


              j'ai essayé system("mysql -u user -B -s -D MaBase -e \"select statut from matable where nom=\'bob\';\" ")

              et system("mysql -u user -B -s -D MaBase -e \"select statut from matable where nom=\"bob\";\" ")

              mais sans résultat...
              • [^] # RESOLU

                Posté par  . Évalué à 1.

                Au fait, j'ai trouvé mon bonheur dans

                cat monFichier | while read ligne
                do
                arg1=`echo $ligne | cut -d'_' -f1`
                arg2=`echo $ligne | cut -d'_' -f2`
                arg3=`echo $ligne | cut -d'_' -f3`

                maCommandeSQL

                done

Suivre le flux des commentaires

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