Variable awk dans un script bash avec mysql
Marc
-
dubcek Messages postés 18627 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18627 Date d'inscription Statut Contributeur Dernière intervention -
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:
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 ;) )
fic3 etant le fichier txt
et la ligne concernant mysql
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
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:
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 ;) )
awk 'BEGIN {etat=$3} {ident=$1} {etat=$3} {system(echo $updatesql);}' fic3
fic3 etant le fichier txt
et la ligne concernant mysql
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
Configuration: Windows XP Firefox 3.5.3
2 réponses
-
Salut,
Une piste :
[tmpfs]$ cat plop 1 txt34 txt1 2 txtFR txt2 3 txt656 txt1 [tmpfs]$ cat foo.sh #! /bin/sh #set -xv while read ident nom etat do echo "updatesql=\`echo \"UPDATE table SET actif=$etat WHERE ID=$ident\" | mysql -vvvv -h localhost -u user -ppassword base\`" done < plop [tmpfs]$ ./foo.sh updatesql=`echo "UPDATE table SET actif=txt1 WHERE ID=1" | mysql -vvvv -h localhost -u user -ppassword base` updatesql=`echo "UPDATE table SET actif=txt2 WHERE ID=2" | mysql -vvvv -h localhost -u user -ppassword base` updatesql=`echo "UPDATE table SET actif=txt1 WHERE ID=3" | mysql -vvvv -h localhost -u user -ppassword base` [tmpfs]$
Tu supprimes mon "echo" (celui qui est souligné), et tu lances ta commande directement, normalement ça devrait le faire ;-))
-
hello
avec awk$ cat a2 1 txt34 txt1 2 txtFR txt2 3 txt656 txt1 $ $ awk '{etat=$3 ; ident=$1 ; printf("UPDATE table SET actif=\x27%s\x27 WHERE ID=\x27%s\x27\n", etat, ident)}' < a2 # mysql -vvvv -h localhost -u user -ppassword base` UPDATE table SET actif='txt1' WHERE ID='1' UPDATE table SET actif='txt2' WHERE ID='2' UPDATE table SET actif='txt1' WHERE ID='3'