Script d'insertion

Résolu
Bebendiaye -  
 Bebendiaye -
Bonjour,

Merci de m'aider,
j'ai deux fichiers fich.sql et fich.txt

Dans fich.sql
select * from tb where mat in ()

dans fich.txt
|07864670434|HG|
|35687905435|EDHG|
|98767431212|OUKHGKKJ|

Pouvez vous m'aider a avoir un script shell qui va inserer ds la requete les valeurs du fich.txt
cad:
select * from tb where mat in ('07864670434','35687905435','98767431212')

Pour cet exemple fich.txt a trois enregistrements il peux en avoir 500 enregistrements.



A voir également:

3 réponses

mamiemando Messages postés 34184 Statut Modérateur 7 888
 
Ça doit se faire avec un LOAD DATA bien réglé :
https://dev.mysql.com/doc/refman/8.0/en/load-data.html

Bonne chacne
0
Bebendiaye
 
je ne vois pas comment!!
je dois recevoir regulierement fich.txt pour generer le fichier fich.sql avec le meme contenu seul les valeurs entre parenthese varie.
cad :('07864670434','35687905435','98767431212')
0
Bebendiaye
 
Hellllllo Merci de m'aider
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

A adapter à tes besoins...

[tmpfs]$ cat fich
|07864670434|HG|
|35687905435|EDHG|
|98767431212|OUKHGKKJ|
[tmpfs]$ cat foo.sh
#! /bin/sh

#set -xv

RECUP=$(egrep -o '[[:digit:]]+' fich)
DATA=$(echo $RECUP | sed "s/^\|$/'/g;s/ /','/g")

echo "select * from tb where mat in (${DATA})"

[tmpfs]$ ./foo.sh
select * from tb where mat in ('07864670434','35687905435','98767431212')
[tmpfs]$

;-))
0
Bebendiaye
 
j'ai des pb sur l'opion -o

D:\APBATCH\AP BATCH\SCRIPT_PROD\prod24\phase2>sh foo.sh
egrep: Unknown option -o
Usage: egrep [-clqinsvx] [-bI] [-e pattern] [-f patternfile] [pattern] [file ...]
select * from tb where mat in ()

D:\APBATCH\AP BATCH\SCRIPT_PROD\prod24\phase2>PAUSE
Appuyez sur une touche pour continuer...
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Emploies "sed" à la place :

RECUP=$(sed 's/[^[:digit:]]//g' fich)
0
Bebendiaye
 
ca marche mais si le fich contient qui des nombre il prend tous les nombre.
il ne doit prendre que les onze premier numbre c'est a dire la premier colonne.
exemple:

|07864670434|6535|MLDHLH|
|35687905435|093073HG|07309|
|98767431212|OUKHGKKJ|875385|
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
[tmpfs]$ cat fich
|07864670434|6535|MLDHLH|
|35687905435|093073HG|07309|
|98767431212|OUKHGKKJ|875385|

[tmpfs]$ cat foo.sh
#! /bin/sh

#set -xv

RECUP=$(awk -F"|" '{ print $2 }' fich)
DATA=$(echo $RECUP | sed "s/^\|$/'/g;s/ /','/g")

echo "select * from tb where mat in (${DATA})"

[tmpfs]$ ./foo.sh
select * from tb where mat in ('07864670434','35687905435','98767431212')
[tmpfs]$

;-))
0
Bebendiaye
 
Merci ca marche je vous remerci et bonne apres midi
0