Variable awk dans un script bash avec mysql
Marc
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 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
A voir également:
- Variable awk dans un script bash avec mysql
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Mysql community server - Télécharger - Bases de données
- Bingo bash - Télécharger - Divers Jeux
2 réponses
Salut,
Une piste :
Tu supprimes mon "echo" (celui qui est souligné), et tu lances ta commande directement, normalement ça devrait le faire ;-))
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
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'