Variable awk dans un script bash avec mysql

Fermé
Marc - 20 oct. 2009 à 22:51
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 21 oct. 2009 à 10:20
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:
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
A voir également:

2 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
21 oct. 2009 à 09:13
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 ;-))
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
21 oct. 2009 à 10:20
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'
0