Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/10/2008, à 14:20

Tornado

[RESOLU]Requete SQL et Shell script

Bonjour à tous,

Je dois interroger une base de données PostgreSQL dans un script Shell, pour cela, j'utilise la commande "psql" qui fonctionne très bien.

Voilà un extrait de mon script :

for machine in `psql -U postgres -h $main_server -d cp2 -t -c "SELECT id_machine,nb_traitement,ip,work_dir FROM work_machine WHERE work_type LIKE '%parse%' ORDER BY priority"` ; do

                echo $machine

done

Je souhaiterai, pour chaque ligne renvoyée par la requête, traiter les données de chaque champ. Le problème, c'est que le script ci-dessus me renvoie toutes les lignes en même temps dans la variable $machine, et donc impossible de faire un traitement ligne par ligne.

Merci par avance de m'aider à comprende ce qu'il se passe,

Dernière modification par Tornado (Le 21/10/2008, à 16:38)

Hors ligne

#2 Le 21/10/2008, à 15:11

alexduf

Re : [RESOLU]Requete SQL et Shell script

Bonjour,

tu peux utiliser la commande read qui t'éclateras ton résultat dans des variables. Cela sous-entend que tes résultats ne ramènent pas d'espaces.

REQUETE="SELECT id_machine,nb_traitement,ip,work_dir FROM work_machine WHERE work_type LIKE '%parse%' ORDER BY priority"
psql -U postgres -h $main_server -d cp2 -t -c "$REQUETE" | while read ID_MACHINE NB_TRAITEMENT IP DIR
do
    echo $ID_MACHINE
    echo $NB_TRAITEMENT
    echo $IP
    echo $DIR
done

Cela devrait fonctionner mais demande à être testé.

A+

Dernière modification par alexduf (Le 21/10/2008, à 15:12)

Hors ligne

#3 Le 21/10/2008, à 16:04

Tornado

Re : [RESOLU]Requete SQL et Shell script

Merci Alexduf pour ta contribution smile

Je viens de tester, et comme tu l'avais signalé, j'obtiens des choses bizarres car le résultat de la requête comporte des espaces sad

voilà à quoi ressemble une ligne renvoyées par la requête :

          1 |             2 | 127.0.0.1 | /home/oba/CP2/worker_machine

J'ai donc plusieurs espaces dans l'ensemble des champs.

Y a t il un truc à ajouter pour réussir à isoler les valeurs de mes champs dans des variables ?

Hors ligne

#4 Le 21/10/2008, à 16:08

Tornado

Re : [RESOLU]Requete SQL et Shell script

j'ai testé en rajoutant :

while read ID_MACHINE PIPE1 NB_TRAITEMENT PIPE2 IP PIPE3 DIR

J'obtiens bien mes variables de manière isolée. Mais bon,... j'en ai la nausée tellement c'est pas propre ^^

Une idée pour optimiser tout cela ?

Hors ligne

#5 Le 21/10/2008, à 16:19

Totor

Re : [RESOLU]Requete SQL et Shell script

Salut,

tu peux récupérer ligne par ligne et ensuite extraire manuellement chacun des champs :

REQUETE="SELECT id_machine,nb_traitement,ip,work_dir FROM work_machine WHERE work_type LIKE '%parse%' ORDER BY priority"
psql -U postgres -h $main_server -d cp2 -t -c "$REQUETE" | while read RESULTAT
do
    ID_MACHINE=$(echo "${RESULTAT}"|awk -F\| '{ print $1 }')
    NB_TRAITEMENT=$(echo "${RESULTAT}"awk -F\| '{ print $2 }')
    IP=$(echo "${RESULTAT}"awk -F\| '{ print $3 }')
    DIR=$(echo "${RESULTAT}"awk -F\| '{ print $4 }')
done

c'est comme tu préfères...


-- Lucid Lynx --

Hors ligne

#6 Le 21/10/2008, à 16:38

Tornado

Re : [RESOLU]Requete SQL et Shell script

En effet ! Cela fonctionne aussi !

Merci à vous deux pour votre aide smile

Je clos le topic smile

Hors ligne