Bonjour,
Comment incorporer des instructions sqlite3 dans un script awk ? Je commence à être un peu perdu après pas mal de recherche infructueuse.
hypotèse :
J'ai une table sqlite sous cette forme
cat|parcelle|surface
45|1|
34|2|
......
un fichier de donnée sous cette forme
1|34.45
2|45
etc....
Et sans suspense, je veux intégrer ces valeurs dans la tables
donc je fais un script awk, comme cela :
#!/usr/bin/awk -f
BEGIN{
base="psg.db";
FS="|";
}
{
print "parcelle " $1 " surface " $2
sqlite3 "$base" "update p_foret set s_matrice=$2 where parcelle=$1"
}
je l'appelle ./mon_fichier_script mon_fichier_de_données
et rien ne se passe. Pourant le lien vers la base est bon, (puisque dans un script bash sqlite accède bien à la base), pourtant je vois bien le fichier se dérouler pendant le script. et j'arrive bien à faire un update avec la commande suivant sqlite3 "$base" "update p_foret set s_matrice=45 where parcelle=2"
Je suis un peu perdu. et je ne vois pas comment le faire avec autre chose que awk car je ne maîtrise pas assez perl pour changer de cheval, et en plus je suis têtu
# system
Posté par ✅ ffx . Évalué à 6.
par exemple avec ls : awk '{ cmd="ls "$1; system(cmd) }'
désolé si j'ai mal compris le problème
[^] # Re: system
Posté par Joris Dedieu (site web personnel) . Évalué à 4.
# ouiiiii
Posté par hervé Couvelard . Évalué à 2.
le truc se fait comme cela :
BEGIN{
base="/ma_base/psg.db";
FS="|";
cmd="/usr/bin/sqlite3 "base" 'select * from p_foret' >toto"
system(cmd);
}
A noter :
pas de $ devant la variable crée, ici base
je l'ai mis dans le begin pour ne pas me prendre le choux.
merci.
[^] # autre solution
Posté par castorpilot . Évalué à 2.
Ton probleme initial (ranger les données depuis le fichier vers la base) peut donc se decomposer ainsi :
awk -F\| '{ print "update p_foret set s_matrice=" $2 " where parcelle="$1}' fichier | sqlite3 psg.db
[^] # Re: autre solution
Posté par hervé Couvelard . Évalué à 2.
En plus comme je le mets en place pour quelqu'un d'autre que moi, je prefère le script complet qui lui permet avec peu d'effort de le copier-coller pour en faire d'autres similaire ave des commandes sql différentes. (le one-liner est un peu plus complexe à mettre en place dans la syntaxe.
Je sais que l'on peut faire un script plus grand avec des paramètres, mais connaissant mon bonhomme il va préférer multiplier les script à 95% identiques, chacun avec son propre nom dans un dossier et être presque autonome.
C'est ca la force du libre, apprendre uax gens à être autonome, je sais c'est pas bon pour les affaires, mais je pense à mon karma
;-)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.