Tube awk | mysql

Résolu/Fermé
loloviolo - 3 nov. 2008 à 02:57
loloviolo Messages postés 12 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 6 novembre 2008 - 6 nov. 2008 à 21:53
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
A voir également:
  • Tube awk | mysql
  • Play tube - Télécharger - Téléchargement & Transfert
  • Mysql download - Télécharger - Bases de données
  • Save tube - Télécharger - Téléchargement & Transfert
  • Tube catcher - Télécharger - Copie & Extraction
  • Av tube - Télécharger - Téléchargement & Transfert

10 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
3 nov. 2008 à 09:34
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 ...
0
loloviolo Messages postés 12 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 6 novembre 2008 20
3 nov. 2008 à 14:57
Nickel ca marche !

Ca parrait effectivement plus logique. Vu l'heure de mon post, j'ai des circonstances attenuantes :-)

Merci dubcek
0
loloviolo Messages postés 12 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 6 novembre 2008 20
4 nov. 2008 à 02:31
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
0
dindoun Messages postés 1027 Date d'inscription mercredi 23 janvier 2008 Statut Membre Dernière intervention 17 février 2017 135
4 nov. 2008 à 06:48
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
 `echo $7 | awk 'blah{blah}' `
0
loloviolo Messages postés 12 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 6 novembre 2008 20
4 nov. 2008 à 13:37
Merci pour l'idée mais j'ai beau essayer dans tous les sens, ça ne marche pas
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
4 nov. 2008 à 08:37
echo /dos1/dos2/fichier.html | awk -F'/\.' '{print $3, $4}'
0
loloviolo Messages postés 12 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 6 novembre 2008 20
4 nov. 2008 à 13:32
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)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
4 nov. 2008 à 13:43
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) :
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 ;-((
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
4 nov. 2008 à 13:46
juste, merci
0
loloviolo Messages postés 12 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 6 novembre 2008 20
4 nov. 2008 à 14:19
Merci à tous - Ca marche !
0
loloviolo Messages postés 12 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 6 novembre 2008 20
5 nov. 2008 à 03:00
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
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
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
5 nov. 2008 à 12:10
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"); ...
0
loloviolo Messages postés 12 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 6 novembre 2008 20
6 nov. 2008 à 21:53
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
0