Tube awk | mysql
Résolu
loloviolo
-
loloviolo Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
loloviolo Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je crois que mysql accepte les tubes mais je ne sais pas trop comment m'y prendre. Voila le code :
Code :
tail -n 100 /fichier_a_ajouter | awk '/markers/{print $1 $7}' | mysql -h localhost -u user -ppassword mailing -e 'INSERT INTO event (hash, ip) VALUES ("testhash", $1)'
Merci de votre aide.
LoLoVioLo
Je crois que mysql accepte les tubes mais je ne sais pas trop comment m'y prendre. Voila le code :
Code :
tail -n 100 /fichier_a_ajouter | awk '/markers/{print $1 $7}' | mysql -h localhost -u user -ppassword mailing -e 'INSERT INTO event (hash, ip) VALUES ("testhash", $1)'
Merci de votre aide.
LoLoVioLo
A voir également:
- Tube awk | mysql
- Tube ripper - Télécharger - Conversion & Codecs
- Save tube - Télécharger - Téléchargement & Transfert
- Av tube - Télécharger - Téléchargement & Transfert
- Mysql community server - Télécharger - Bases de données
- Movie tube - Télécharger - TV & Vidéo
10 réponses
oui, mais je suppose que l'input doit être au format sql. je verrais plutôt:
tail -n 100 /fichier_a_ajouter | awk '/markers/{print 'INSERT INTO event (hash, ip) VALUES (\"testhash\"," $1 $7}' | mysql -h localhost -u user -ppassword ...
tail -n 100 /fichier_a_ajouter | awk '/markers/{print 'INSERT INTO event (hash, ip) VALUES (\"testhash\"," $1 $7}' | mysql -h localhost -u user -ppassword ...
Nickel ca marche !
Ca parrait effectivement plus logique. Vu l'heure de mon post, j'ai des circonstances attenuantes :-)
Merci dubcek
Ca parrait effectivement plus logique. Vu l'heure de mon post, j'ai des circonstances attenuantes :-)
Merci dubcek
J'en profite pour poser un autre problème. $7 est en fait une URL de type /dos1/dos2/fichier.html
Comment entrer dos2 et fichier (sans .html) dans ma base toujours avec le même commande.
J'ai essayé awk mais comme je suis déjà dans un awk, ça passe pas.
J'ai essayé split, ça va pas non plus.
J'ai aussi pensé à appeler awk avec l'option -F mais elle n'accepte qu'un seul séparateur
Merci de votre aide.
LoLoVioLo
Comment entrer dos2 et fichier (sans .html) dans ma base toujours avec le même commande.
J'ai essayé awk mais comme je suis déjà dans un awk, ça passe pas.
J'ai essayé split, ça va pas non plus.
J'ai aussi pensé à appeler awk avec l'option -F mais elle n'accepte qu'un seul séparateur
Merci de votre aide.
LoLoVioLo
salut
tu peux peut être essayer en incluant un deuxième awk dans des `` ( guilletmets altgr 7 )
et donc à la place de $7 tu mets
tu peux peut être essayer en incluant un deuxième awk dans des `` ( guilletmets altgr 7 )
et donc à la place de $7 tu mets
`echo $7 | awk 'blah{blah}' `
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
echo /dos1/dos2/fichier.html | awk -F'/\.' '{print $3, $4}'
Merci de ton aide dubcek
Malheureusement, cette methode ne fonctionne pas. Comme je le disais plus haut, awk semble n'accepter en option -F qu'un caractere ou chaine.
Dans ton cas, il m'affiche un avertissement ( echapement \. traité comme . seulement ) prend donc en compte /. comme separateur et decoupe en os1, os2 et ichier.html (le point etant evalué comme n'importe que caractere)
Malheureusement, cette methode ne fonctionne pas. Comme je le disais plus haut, awk semble n'accepter en option -F qu'un caractere ou chaine.
Dans ton cas, il m'affiche un avertissement ( echapement \. traité comme . seulement ) prend donc en compte /. comme separateur et decoupe en os1, os2 et ichier.html (le point etant evalué comme n'importe que caractere)
Salut,
Je pense que l'expression de dubcek doit s'écrire plutôt comme ça (sans espace après le crochet ouvrant et avant le crochet fermant) :
Je pense que l'expression de dubcek doit s'écrire plutôt comme ça (sans espace après le crochet ouvrant et avant le crochet fermant) :
awk -F'[ /\. ]' '{print $3, $4}'C'est une mauvaise interprétation de ces caractères par la syntaxe interne à CCM qui transforme les expressions entourées par des crochets en lien ;-((
Ahhhh ca devient un vrai casse-tete ce script.
Ca devrait marcher ... et pourtant .... enlevez les espaces dans [ /\. ]
tail -f /var/log/httpd/VLOG-2008-11-monsite.com.log | awk -v event_date="$(date '+%Y-%m-%d %H:%M:%S')" '/markers/{print $1$7"/"event_date}' | awk -F [ /\. ] '//{print "INSERT INTO event (event_date, ip, camp, user, hash, status) VALUES (\""$11"\", \""$1"."$2"."$3"."$4"\", "$7", "$8", \""$9"\", \"READ\");"}' | mysql -h localhost -u user -ppassword table
enlevez les espaces dans [ /\. ]
Le script marche bien avec tail -n 100
Le script marche aussi avec le tail -f si je m'arrete au premier awk : tail -f /var/log/httpd/VLOG-2008-11-monsite.com.log | awk -v event_date="$(date '+%Y-%m-%d %H:%M:%S')" '/markers/{print $1$7"/"event_date}'
Problemes :
1- La date reste toujours la meme (date du debut d'execution)
2- Le script complet avec le tail -f ne retourne rien
Merci de votre aide.
LoLoVioLo
Ca devrait marcher ... et pourtant .... enlevez les espaces dans [ /\. ]
tail -f /var/log/httpd/VLOG-2008-11-monsite.com.log | awk -v event_date="$(date '+%Y-%m-%d %H:%M:%S')" '/markers/{print $1$7"/"event_date}' | awk -F [ /\. ] '//{print "INSERT INTO event (event_date, ip, camp, user, hash, status) VALUES (\""$11"\", \""$1"."$2"."$3"."$4"\", "$7", "$8", \""$9"\", \"READ\");"}' | mysql -h localhost -u user -ppassword table
enlevez les espaces dans [ /\. ]
Le script marche bien avec tail -n 100
INSERT INTO event (event_date, ip, camp, user, hash, status) VALUES ("2008-11-05 02:50:50", "90.8.70.76", 1, 1, "4884f1e54bc4e21a51b46cff8d37bd9fbd217b51", "READ");
Le script marche aussi avec le tail -f si je m'arrete au premier awk : tail -f /var/log/httpd/VLOG-2008-11-monsite.com.log | awk -v event_date="$(date '+%Y-%m-%d %H:%M:%S')" '/markers/{print $1$7"/"event_date}'
90.8.70.76/mailing/markers/1/1/4884f1e54bc4e21a51b46cff8d37bd9fbd217b51.gif/2008-11-05 02:52:30
Problemes :
1- La date reste toujours la meme (date du debut d'execution)
2- Le script complet avec le tail -f ne retourne rien
Merci de votre aide.
LoLoVioLo
1 c'est normal, la commande date est exécutée au démarrage de awk. pour que la date soit recalculée à chaque ligne, il faut dans le awk, quelque chose comme awk 'system("date"); ...
Voilà mon script est fini ! Merci à tous pour votre aide (surtout dubcek)
Pour info, je ne sais toujours pas pourquoi chaque pipe fonctionne independement mais pas l'ensemble. J'ai finalement utilisé une fonction que j'appelle depuis mon awk. Ainsi la date est bien rafraichie et j'ai jamais plus de 2 pipes par ligne.
Je vous conseille la lecture du super post de drl sur unix.com
https://www.unix.com/shell-programming-and-scripting/49026-external-function-awk.html
Pour info, je ne sais toujours pas pourquoi chaque pipe fonctionne independement mais pas l'ensemble. J'ai finalement utilisé une fonction que j'appelle depuis mon awk. Ainsi la date est bien rafraichie et j'ai jamais plus de 2 pipes par ligne.
Je vous conseille la lecture du super post de drl sur unix.com
https://www.unix.com/shell-programming-and-scripting/49026-external-function-awk.html