Bash et resultat de requete SQL

Résolu
wally -  
 wally -
Bonjour tout le monde,

je cherche à récupérer le resultat d'une requete qui me retourne plusieur ligne
voici mon script shell

requete="connect ma_base;  SELECT champ1,champ2 FROM ma_table"
mysql -u root -p$rootMysqlPass -e "$requete" | while read RESULTAT
do
    champ1=$(echo "${RESULTAT}"|awk -F\| '{ print $1 }')
    champ2=$(echo "${RESULTAT}"|awk -F\| '{ print $2 }')
    echo "champ1($champ1) - champ2($champ2)"
done


j'aurai voulu que le résultat soit

champ1(valeur_champ1) - champ2(valeur_champ2)
champ1(valeur_champ1) - champ2(valeur_champ2)
champ1(valeur_champ1) - champ2(valeur_champ2)

et au lieu j'ai le resultat

champ1(champ1 champ2) - champ2()
champ1(valeur_champ1 valeur_champ2) - champ2()
champ1(valeur_champ1 valeur_champ2) - champ2()
champ1(valeur_champ1 valeur_champ2) - champ2() 


quelqu'un pourrait-il m'aider svp ?
d'avance merci.
Configuration: Windows XP
Firefox 3.0.4

8 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    requete="connect ma_base;  SELECT champ1,champ2 FROM ma_table"
    mysql -u root -p$rootMysqlPass -e "$requete" | sed '1d' | while read nom pnom age; do 
    echo "$nom - $pnom - $age"
    done
    7
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    requete="connect ma_base;  SELECT champ1,champ2 FROM ma_table"
    mysql -u root -p$rootMysqlPass -e "$requete" | while read nom pnom age; do 
    commande1 $nom $age $pnom 
    commande2 $nom $pnom $age
    done
    Bien sur, le séparateur de champ étant un espace ou une tabulation et non pas un "|" auquel cas il faudrait le préciser en début de boucle...
    1
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Affiche-nous un exemple de sortie générée par ta requête SQL, sans quoi on ne te sera d'aucun secours.
    0
  4. wally
     
    bonjour merci de votre réponse,

    j'ai modifier en donnant un nom à champ1 etc...

    var_dream=`mysql -u root -p$rootMysqlPass -B --exec="connect ma_base;  SELECT nom,pnom,age FROM ma_table"`
    echo "$var_dream"
    


    et la sortie est
    nom      prenom   slots     
    dupond  jean       32
    dumont  benoit   22
    pondu    françois  43
    


    et j'aimerai pouvoir faire un traitement sur chaque ligne ( row ) de retour

    - boucle sur le resultat de la requête
      nom="valeur du champ nom"
      prenom="valeur du champ prenom"
      age="valeur du champ age"
      
      echo "$nom - $prenom - $age"
    - fin de la boucle
    


    Je sais pas si je m'exprime comme il faut
    encore merci de votre aide
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    [tmpfs]$ cat fich
    nom      prenom   slots
    dupond  jean       32
    dumont  benoit   22
    pondu    françois  43
    
    [tmpfs]$ while read nom prenom age;do echo "$nom - $prenom - $age";done < fich
    nom - prenom - slots
    dupond - jean - 32
    dumont - benoit - 22
    pondu - françois - 43
    
    [tmpfs]$  
    Mais bon si c'est juste pour rajouter un tiret entre chaque champ, il y a d'autres voies plus simple pour y arriver ;-))
    0
  7. wally
     
    merci encore de votre réponse,

    je n'ai pas compris ou je devais mettre
    [tmpfs]$ while read nom prenom age;do echo "$nom - $prenom - $age";done < fich
    nom - prenom - age
    dupond - jean - 32
    dumont - benoit - 22
    pondu - françois - 43
    
    [tmpfs]$  
    


    désolé je débute

    enfaite je doit utiliser les variable ainsi créer à chaque ligne pour passer des paramètre a une autre exécution

    exemple :
    - boucle sur le resultat
    nom="valeur nom"
    prenom="valeur pnom"
    age="valeur age"
    
    ici je lance une exécution avec comme argument mes variable
    commande1 nom age pnom 
    commande2 nom pnom age
    - fin de la boucle
    

    Le trait d'union était juste pour tester, je pourrait alors utiliser les variable pour exécuter une action dans sa boucle

    et à quoi correspond [tmpfs]$ ?

    encore une fois merci de votre aide
    0
  8. wally
     
    merci beaucoup celà fonctionne parfaitement

    j'ai juste un souci c'est que il me retourne en premiere le nom des colonne
    requete="connect ma_base;  SELECT champ1,champ2 FROM ma_table"
    mysql -u root -p$rootMysqlPass -e "$requete" | while read nom pnom age; do 
    echo "$nom - $pnom - $age"
    done
    

    comme je l'ai dit ca marche à merveille grâce à vous et le resultat des echo est
    nom - prenom - age
    dupond - jean - 32
    dumont - benoit - 22
    pondu - françois - 43
    

    j'ai mit en gras la ligne concerné
    est-il possible d'empêcher le retour des nom de colonne dans le résultat ?

    je tiens encore à vous remercie, sans votre aide j'en serait pas là
    0
  9. wally
     
    mille fois merci

    vous avez résolu définitvement mon problème

    grand grand GRAND merci

    je signale le sujet résolu :D
    0