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 :

awk dans script + mysql


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut awk dans script + mysql
    Bonjour,

    je cherche a lire un fichier txt ligne par ligne (ca je sais faire ) et inserer le tout dans mysql.
    un exemple vaut mieux qu'un long discours:
    contenu du fichier txt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1           txt34    txt1
    2           txtFR    txt2
    3           txt656   txt1
    bien sur chaque ligne doit etre independante l'une de l'autre parce que:
    ensuite je fais un update sur MySQL, sauf que ca ne marche pas, en prenant en compte les variables de awk ($1 et $2) ca passe pas, sql me retourne une erreur.
    en debugant un peu, je me suis rendu compte que le script n'aime pas(plus) trop les $1 et $2 donc j'ai essaye de remplacer les variables d'awk par d'autre, ca marche à moitie :S
    concretement: voici le bout de code (/goret_mode_inside )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk 'BEGIN {etat=$3} {ident=$1} {etat=$3} {system(echo $updatesql);}' fic3
    fic3 etant le fichier txt
    et la ligne concernant mysql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    updatesql=`echo "UPDATE table SET actif='$etat' WHERE ID='$ident'" | mysql -vvvv -h localhost -u user -ppassword base`
    je crois que j'ai parcouru la moitie des resultat google (ca fait un paquet) depuis 1 semaine, essaye plein de truc, mais ca veut pas (
    si quelqu'un peut me donner un coup de main siouplait
    Merci

  2. #2
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bonjour,

    Il y a plusieurs choses que je ne comprends pas dans le code:

    • BEGIN {etat=$3}: La clause BEGIN est exécutée au début avant toute lecture, donc $3 est une chaîne vide. Est-ce voulu?
    • Il y a une série d'accodades qui suit. Normalement une seule est nécessaire, celle qui sera exécutée pour chaque ligne puisqu'il n'y a pas de sélection.
    • Assigner des variables sans les utiliser ensuite est parfaitement inutile (ident et etat).
    • Faire un system(echo ...) est lourd, la fonction print de awk est suffisante.
    • La variable $updatesql est-elle bien globale? Parce qu'un nouveau shell est créé par la commande system de awk, et il faut être sûr que cette variable existe dans ce nouveau shell.
    • le point-vigule est un séparateur et non un terminateur. Il est donc inutile après la commande system puisqu'il n'y a plus rien après.

    Pour en revenir au programme, je ne comprends pas ce qu'il doit faire. Je vois bien le fichier d'entrée, mais quelles devraient être les données en sortie?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut
    Bonjour,

    effectivement, tout ce que vs dites n'est pas faux (je suis pas dev' à la base )
    concretement, je voudrais lire le fichier fic3 ligne par ligne et inserer 2 colonne de chaque ligne dans MySQL
    la valeur 1 et la 3 (1 pour ident et 3 pour etat)

    comme dit, j'ai essayer plein de choses (awk avec print) pour voir si la sorti en shell etait correct et pouvoir ainsi l'injecter sur la ligne sql par la suite.
    la j'en suis au point ou sql me dit:
    1 command not found
    2 command not found
    etc... pour chaque ligne du fichier fic

    j'avoue que apres m'etre pris la tete pdt une semaine sur ces 2 lignes, je ne dois pas (plus) avoir l'esprit tres clair

  4. #4
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Ce n'est toujours pas clair. J'ai bien vu le fichier d'entrée avec ses trois colonnes, mais ce qu'il faut passer à la base de données, concrètement, c'est quoi? Est-ce:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE table SET actif = 'txt1' WHERE id = '1'
    UPDATE table SET actif = 'txt2' WHERE id = '2'
    UPDATE table SET actif = 'txt1' WHERE id = '3'
    le tout dans une variable (si pas trop gros) ou dans un fichier (si HÉNOOORME)?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut
    c'est exactement ca
    je pense que ca peut tenir dans une variable

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Pourquoi pas simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     awk '{printf "UPDATE dbase.table SET col=\047%s\047 WHERE col2=\047%s\047;\n", $3, $1}' fichier.entree | mysql -u root -p

  7. #7
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Il est important d'être précis dans ce que l'on veut obtenir, et sans diriger a priori le type de solution (d'où ma signature!). Voici donc ce que j'imagine (à tester...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{print "UPDATE table SET actif = \047" $3 "\047 WHERE id = \047" $1 "\047"} fic3 | mysql ...
    Il est même inutile de passer par une variable: les données sont envoyées directement dans un tube vers mysql.

    Edit: Grillé par ripat... Mais c'est assez proche, non?

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

Discussions similaires

  1. Executer un script mysql parametré dans du code
    Par mattmax dans le forum VB.NET
    Réponses: 2
    Dernier message: 08/08/2012, 11h01
  2. Réponses: 22
    Dernier message: 20/07/2010, 15h43
  3. Réponses: 1
    Dernier message: 25/01/2010, 23h06
  4. commande awk dans script perl
    Par sorilazer dans le forum Langage
    Réponses: 3
    Dernier message: 19/07/2007, 10h16
  5. [langage] awk et sed dans script perl
    Par scoti dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2003, 18h26

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