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

Unix Discussion :

Récupérer résultat d'une réquête dans un tableau en shell (ksh)


Sujet :

Unix

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut Récupérer résultat d'une réquête dans un tableau en shell (ksh)
    Bonjour,

    Je me permets de faire appel aux développeurs (je ne le fais qu'en appoint...)

    Je fais un script shell (ksh).

    Cela pourrait très bien être une requête sql via sqlplus, même s'il s'agit ici d'une requête Hive, ça ne change pas ma question.

    Je veux récupérer par une requête Hive (via beeline) 2 colonnes d'une table dans un tableau.
    Je fais :

    RESULTAT_REQUETE=`beeline [...] --showHeader=false --outputformat=csv2 -e "select colonnne1,colonnne2 from ma_table;"`

    Cela me donne les bonne données mais en 1 seule variable d'une seule ligne et colonne.

    Or, je voudrais que ça me rende un tableau à 2 dimensions (à envoyer par mail) du type :

    colonne1 colonne2
    toto 5
    titi 3
    tata 7

    Pourriez- vous m'indiquer comment faire, svp ?

    Merci par avance !

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 294
    Par défaut
    Bonjour

    "D'une seule ligne" ? Je ne pense pas. Je pense plutôt que tu l'as mal affichée.

    Quoi qu'il en soit, il suffit d'enlever la substitution de commande. N'est-ce pas ? D'ailleurs, entre nous, utiliser les `backtics` est suranné, obsolète, dépassé, à mettre à la poubelle. On utilise $( ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    beeline [...] --showHeader=false --outputformat=csv2 -e "select colonnne1,colonnne2 from ma_table;"

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut
    Bonjour Flodelarab,

    Merci d'avoir répondu.

    La commande beeline seule fonctionne bien en effet, et me donne les 3 lignes attendues.
    Mais j'ai besoin de récupérer le résultat dans une variable.
    Et d'utiliser par exemple la 2ème colonne de la 1ère ligne du résultat.

    Donc enlever les `backtics` ou $( ) et la variable ne résout pas mon problème.

    Avez-vous une solution ?

    Merci !

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 294
    Par défaut
    Vouloir tout mettre dans une variable comme dans les langages de programmation à pointeurs (comme C++, java, ...) n'est pas une bonne idée. La sortie d'une commande est un fichier texte. Et pour éviter les fichiers temporaires, en shell, on utilise des conduites (pipes en anglais). Le résultat de la première commande sert de fichier d'entrée de la seconde commande.

    utiliser par exemple la 2ème colonne de la 1ère ligne du résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    beeline [...] --showHeader=false --outputformat=csv2 -e "select colonnne1,colonnne2 from ma_table;" | awk '(NR==1){print $2;}'
    Un exemple concret factice :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    { echo "Toto Tata Titi Tutu"; echo "Zozo zizi zaza zuzu"; echo "Popo papa pipi pupu";}
    Toto Tata Titi Tutu
    Zozo zizi zaza zuzu
    Popo papa pipi pupu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    { echo "Toto Tata Titi Tutu"; echo "Zozo zizi zaza zuzu"; echo "Popo papa pipi pupu";} | awk '(NR==1){print $2;}'
    Tata
    Si le séparateur de champs, dans chaque ligne, n'est pas l'espace, tu peux le spécifier par l'option -F.

    Il existe des tas d'outils pour t'aider à reformater tes données. Reste à savoir le vrai but final.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Par défaut
    Merci Flodelarab de ton retour.

    Ah OK donc si je comprends bien, on ne peux pas utiliser de tableaux tab[i] ou tab[i,j] ?

    Je vais être plus précis sur mon besoin en utilisant un exemple factice également.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select nom,count(*) from clients where nom in ${liste_clients};
    Toto,2
    Tata,0
    Titi,1
    Puis en fonction du count(*), s'il est différent de 0, on indique Présent, et s'il est égal à 0, on indique absent, afin d'avoir un tableau du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Toto : Présent
    Tata : Absent
    Titi : Présent
    Merci par avance !

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 294
    Par défaut
    Ah OK donc si je comprends bien, on ne peux pas utiliser de tableaux tab[i] ou tab[i,j] ?
    tab[i] oui.
    tab[i,j] non.


    Je vais être plus précis sur mon besoin en utilisant un exemple factice également.
    L'exemple que tu prends s'appelle un fichier CSV (comma separated values = valeurs séparées par une virgule). C'est souvent ce qui tient lieu de tableau bidimensionnel en shell. Même si le séparateur n'est pas toujours la virgule.

    Puis en fonction du count(*), s'il est différent de 0, on indique Présent, et s'il est égal à 0, on indique absent, afin d'avoir un tableau du type :
    awk est le bon outil pour des fichiers csv.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk -F, '($2>0){print $1,"Présent";} ($2==0){print $1,"Absent";}' fichier.txt
    Toto Présent
    Tata Absent
    Titi Présent
    Ou avec un opérateur ternaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk -F, '{print $1, (($2>0)?"Présent":"Absent");}' fichier.txt
    Toto Présent
    Tata Absent
    Titi Présent
    Dans ton retraitement de requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./ma_requête_BDD.ksh | awk -F, '{print $1, (($2>0)?"Présent":"Absent");}'

Discussions similaires

  1. [MySQL] Récupérer le résultat d'une requête dans un tableau à une seule dimension
    Par Robjerey dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/09/2014, 16h20
  2. Récupérer le résultat d'une variable dans un tableau (VBA)
    Par fredplusvar dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/03/2014, 18h25
  3. Récupérer résultat d'une requête dans un tableau
    Par juju1988 dans le forum Débuter
    Réponses: 2
    Dernier message: 23/03/2010, 13h44
  4. [MySQL] Récupérer le résultat d'une requête dans un tableau
    Par Z20500 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/11/2008, 18h30
  5. [MySQL] récupérer le résultat d'une requête dans un tableau
    Par faty2 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/05/2007, 16h22

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