Lire un fichier ligne par ligne, ligne dans $var et encore plus

Résolu/Fermé
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 - 4 oct. 2012 à 14:43
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 - 4 oct. 2012 à 15:56
Bonjour tout le monde

je suis entrain de coder un script bash permettant d'executer des requetes sql se trouvant dans un fichier a raison d'une req par ligne.

je veux envoyer les 50 première req (ca c'est good) un ptit sleep de 30sec ensuite passer a la 51req juqsqu a la 101 ème ligne et ainsi de suite jusqua la fin du fichier (qui n'a pas toujours le meme nombre de requètes)

je ne vois pas comment je pourrais faire pour envoyer les req de 50 en 50 a partir de la 51ème...

Une idée???

Merci d'avance



A voir également:

2 réponses

Yakuru Messages postés 78 Date d'inscription lundi 1 octobre 2012 Statut Membre Dernière intervention 4 octobre 2012 24
4 oct. 2012 à 14:47
Salut,

Je comprends pas ton soucis. Vu que tu arrives à le faire pour les 50 premières, tu peux faire de même pour la suite ?
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
4 oct. 2012 à 14:55
ouep je sais c'est con xD
je n'arrive pas a voir comment je peux faire pour continuer justement...

voila le script en partie:

#!/bin/bash

## var connexion DB

echo "choix du fichier"
read file

if [ ! $file ] ; then
     echo "le fichier n'existe pas"
else
     line=1
     while [ $line -lt 50 ]
     do
           req='head -$line $file'
           mysql --host --user --password --host base -e "$req"
     done
fi
0
Yakuru Messages postés 78 Date d'inscription lundi 1 octobre 2012 Statut Membre Dernière intervention 4 octobre 2012 24
4 oct. 2012 à 14:58
Et pourquoi ne pas utiliser une autre variable, que tu incrémentes à chaque tour de boucle, et lorsqu'elle arrive à 50, tu fais ton sleep, puis tu remet à 0 cette variable ?

Du coup, tu lis ton fichier en entier dans ton while, et tu utilises cette variable pour gérer la lecture (et l'exécution de tes requêtes) 50 par 50.
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
4 oct. 2012 à 15:00
carrément pas bête :D

mais tu pourrait me donner un petit exemple please?
0
Yakuru Messages postés 78 Date d'inscription lundi 1 octobre 2012 Statut Membre Dernière intervention 4 octobre 2012 24
4 oct. 2012 à 15:10
Pas de soucis
Un tuto de lecture de fichier https://forums.commentcamarche.net/forum/affich-37620017-comment-lire-un-fichier-ligne-par-ligne

SQL_exec=0
while read ligne  
do  
   commande  sql
   SQL_exec = 'expr $SQL_exec + 1'
   if [ $SQL_exec -eq 50 ]
   then
           sleep 30
           SQL_exec=0
   fi
done < fichier


Quelque chose comme ça je dirais. J'ai fais ça vite fais, juste pour te donner l'idée, mais la syntaxe est peut être pas top.
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
4 oct. 2012 à 15:17
ok merci :)
et pourquoi tu fait pas un SQL_exec+=1 ??

et donc la une fois le SQL_exec arriver à 50 hop on passe à la ligne 51 ?

je savais bien que mon head machin chose était foireux xD
0
Yakuru Messages postés 78 Date d'inscription lundi 1 octobre 2012 Statut Membre Dernière intervention 4 octobre 2012 24
4 oct. 2012 à 15:21
J'ai un doute sur le +=1, de mémoire, ça passe pas sur tous les environnements, à tester sur le tiens :)

En fait, avec le while read ligne, tu vas lire tout ton fichier (je te laisse voir le tuto de CCM que je t'ai linké). Comme ça, tu vas lire ton fichier ligne par ligne, exécuter ta commande SQL (donc comme tu avais mis dans ton script), et également incrémenter une variable pour compter le nombre de commande que tu as exécuté. Il te suffit alors de réaliser un sleep toute les X commandes exécutées, puis en sortant du if, le script va continuer de parcourir le while, donc de lire ton fichier ligne par ligne.

J'ai pas la possibilité de le tester par contre, donc tout est théorique pour le moment, mais j'aurais fais comme ça.
0