Bonjour,
Voilà mon problème:
J'ai un fichier texte ( tableau au format csv , le séparateur étant la virgule) utilisé par une application tout le temps. L'application écris dans ce fichier ligne par ligne. Le fichier change chaque jour (son nom étant Audit20060629.csv pour le 29 juin par exemple.) J'accéde à ce fichier via un share windows (samba samba... je sais, j aurai préféré nfs mais je suis le seul sous linux avec mes serveurs, et impossible de délocalisé le fichier Audit ailleur)
J'aimerai trouver une méthode pour insérer chaque nouvelle ligne de ce fichier dans une table.
De plus la 1ère ligne du fichier est a ne pas insérer (elle contient l entête des colonnes)
Au début j'ai pensé à script avec un tail, mais je ne sais pas comment récupérer les infos visibles à l'écran ni les insérer depuis un script bash.
Quelqu'un aurait il une idée ? (je ne connais pas PHP mais si le code est pas trop compliqué je devrais m'en sortir)
D'avance milles mercis.
# awk est ton ami.
Posté par totof2000 . Évalué à 2.
....
}' fichier_csv
le -F\; indique que ton separateur de champ est le caractere ';', NR>1 : la séquence qui suit sera exécutée si le numéro d'enregistrement (la ligne) est supérieur à un.
Dans le bloc entre accolade, tu accède à chaque champ de ton tableau par son numéro: $1 correspond à la première colonne, $2 à la seconde. Tu peux initialiser tes requetes dans une variable et les exécuter à l'aide de la fonction awk "system", ou générer un fichier decommande sql et l'exécuter après sa génération par awk.
# précisions
Posté par snurpsss . Évalué à 1.
j aimerai que l insertion dans la base mysql se fasse au même instant ( on va dire moins de 5 sec apres) que l'écriture dans le fichier.
apres avoir lus la doc, j ai trouvé ca :
mkfifo /mysql/db/x/x
chmod 666 /mysql/db/x/x
find / -ls > /mysql/db/x/x
mysql -e "LOAD DATA INFILE 'x' INTO TABLE x" x
je me suis dis qu en remplacant le find par un tail -f sur mon fichier ca devrais marcher.
Problème: la derniere ligne est pas trés explicite dans l'exemple. Chez moi, l 'exemple donnerait ca:
mkfifo /mnt/fifo/titi
chmod 666 /mnt/fifo/titi
tail -f monfichier.csv > /mnt/fifo/titi
mais je ne sais pas comment modifier la ligne suivante pour qu elle colle a cas:
mysql -e "LOAD DATA INFILE 'x' INTO TABLE x" x
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.