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 :

Récupérer contenu reponse MySQL sur plusieurs lignes et non pas sur une seule ligne


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Points : 14
    Points
    14
    Par défaut Récupérer contenu reponse MySQL sur plusieurs lignes et non pas sur une seule ligne
    Bonjour.
    Je récupère le contenu de la variable reponse_commande_mysql à partir de la commande mysql suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reponse_commande_mysql=`mysql -h $host_slave -u $mysql_user -p$passwd_Mysql_user -e "$commande_sql_show_slave_status"`
    Cette réponse sql est sur plusieurs lignes. Quand je l'affiche avec echo (ou echo -e) elle s'affiche correctement (sur plusieurs ligne). Cependant quand j'essaye d'extraire la ligne qui correspond au motif recherché, cela ne marche pas car elle est vue comme une seule ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    etat_synchro_Last_Errno=`echo $reponse_commande_mysql | grep "Last_Errno" | tr -s ' ' | cut -d' ' -f 3`
    D'ailleurs quand je sauvegarde le contenu de cette variable dans un fichier, elle est sur une seule ligne.
    Savez vous comment faire pour avoir cette variable sur le bon format SQL (plusieurs lignes) pour que je puisse extraire la (les) ligne(s) correspondant au(x) motif(s) recherché(s) ?
    Une des astuces est d'ajouter le grep directement après la commande MySQL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne_error=`mysql -h $host_slave -u $mysql_user -p$passwd_Mysql_user -e "$commande_sql_show_slave_status" | grep "Last_Errno" | tr -s ' ' | cut -d' ' -f 3`
    Cette astuce fonctionne, par contre elle m'intéresse moins car, dans la suite de mon script, j'ai d'autres grep à faire sur la réponse MySQL. Ce qui revient à dire lancer la commande sql à chaque grep.

    Cordialement.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    D'abord, tu n'as pas respecté la règle: "il faut toujours protéger les variables par des doubles-quotes, à moins de savoir pourquoi on ne le fait pas". Ton "echo" fait disparaitre les \n.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ toto="tata
    > titi"
    $ echo $toto
    tata titi
    $ echo "$toto"
    tata
    titi
    Ensuite, on peut résumer ta commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    etat_synchro_Last_Errno=`echo $reponse_commande_mysql | grep "Last_Errno" | tr -s ' ' | cut -d' ' -f 3`
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    etat_synchro_Last_Errno=$(awk '/Last_Errno/{print $3;}' <<< "$reponse_commande_mysql")
    Enfin, personnellement, je ne passerais pas par une variable. Je garderais les fichiers. Quit à utiliser un fichier temporaire.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    sinon en jouant du \G ça peut pas faire l'affaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql -e "show slave status\G" | awk '/Last_Errno/ {print $2}'

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    D'abord, tu n'as pas respecté la règle: "il faut toujours protéger les variables par des doubles-quotes, à moins de savoir pourquoi on ne le fait pas". Ton "echo" fait disparaitre les \n.
    . . .
    Enfin, personnellement, je ne passerais pas par une variable. Je garderais les fichiers. Quit à utiliser un fichier temporaire.
    Merci pour votre réponse. CA MARCHE .
    J'ai utilisé hier ", mais ça n'a pas marché. J'ai probablement oublié ou ajouté autre chose entre temps, tellement j'ai fait plusieurs tests.

    Sinon pourquoi vous préférez les fichiers. C'est la solution que j'utilise jusqu'à présent comme parade au problème (fichier temporaire que je supprime à la fin du script), mais pour moi ça serait plus correcte de passer par une variable, ou je me trompe ?

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/11/2015, 09h31
  2. Réponses: 1
    Dernier message: 26/08/2015, 18h35
  3. [AC-2003] operation sur les ligne et non pas sur les colonnes
    Par omarnigth dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 21/11/2011, 21h25
  4. Insertion sous la derniere ligne (et non pas sur)
    Par nono le golfeur dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/08/2007, 10h28
  5. execution sur l'emulateur mais non pas sur le Pocket PC
    Par inter_amine dans le forum Windows Mobile
    Réponses: 2
    Dernier message: 08/06/2007, 09h35

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