Traitement fichier avec SED ,AWK ou autres

Fermé
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 10 juil. 2008 à 09:45
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 10 juil. 2008 à 16:46
Bonjour,
voila je souhaite utiliser un fichier afin de faire un update dans ma base de données. Le contenu de mon fichier est :

GHO_FB_5633
1245
65
254
123
985
2564
etc..

J'ai besoin de recuperer tous les nombres qui sont sous GHO_FB_5633 et puis pouvoir faire un update d'un champ de ma table pour chacun de ses nombres :

ex :

update maTable set champ=6 where code= mon fichier

Est ce possible ?

ou alors comment faire pour traiter mon fichier afin de le formater de la sorte avec SED ou AWK ou autre:

fichier d'origine :
GHO_FB_5633
1245
65
254
123
985
2564
etc..

fichier traité :
update maTable set champ=6 where code= 1245
update maTable set champ=6 where code= 65
update maTable set champ=6 where code= 254
update maTable set champ=6 where code= 123
update maTable set champ=6 where code= 985
update maTable set champ=6 where code= 2564

Avez vous une idée?

Merci beaucoup

A voir également:

2 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
10 juil. 2008 à 11:03
Salut,

Une façon de faire :
jp@MDK:~/tmpfs ssh$ cat fichier.txt
GHO_FB_5633
1245
65
254
123
985
2564
etc..

jp@MDK:~/tmpfs ssh$ cat foo.sh

#! /bin/bash

#set -xv

while read line
do
grep '^[0-9]' <<<${line} >/dev/null
if [ "$?" != 0 ]
then continue
else
echo "update maTable set champ=6 where code= ${line}" >> resultat.txt
fi
done < fichier.txt

jp@MDK:~/tmpfs ssh$ ./foo.sh

jp@MDK:~/tmpfs ssh$ cat resultat.txt
update maTable set champ=6 where code= 1245
update maTable set champ=6 where code= 65
update maTable set champ=6 where code= 254
update maTable set champ=6 where code= 123
update maTable set champ=6 where code= 985
update maTable set champ=6 where code= 2564

jp@MDK:~/tmpfs ssh$
ou bien avec sed directement :
jp@MDK:~/tmpfs ssh$ cat fichier.txt
GHO_FB_5633
1245
65
254
123
985
2564

jp@MDK:~/tmpfs ssh$ sed -n '1d;s/.*/update maTable set champ=6 where code= &/w sortie.txt' fichier.txt

jp@MDK:~/tmpfs ssh$ cat sortie.txt
update maTable set champ=6 where code= 1245
update maTable set champ=6 where code= 65
update maTable set champ=6 where code= 254
update maTable set champ=6 where code= 123
update maTable set champ=6 where code= 985
update maTable set champ=6 where code= 2564

jp@MDK:~/tmpfs ssh$
;-))
0
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
10 juil. 2008 à 12:33
Merci beaucoup jipicy c'est bien cela qu'il me faut mais j'ai oublié un détail en faites mes utilisateurs dependent aussi d'un code groupe du style :

303
110
505

donc moi ce que j'ai fait dans mon script c'est un bloc :

[code]if [ "${USER}" == "toto" ]
then

REPMAJ="toto"
CODERES="303"


elif [ "${USER}" == "tata" ]
then

REPMAJ="tata"
CODERES="110"


elif [ "${USER}" == "titi" ]
then

REPMAJ="titi"
CODERES="505"
fi
/code

il faut donc pour l'update que la ligne soit de la sorte :

update maTable set champ=6 where code='303_1245' ou update maTable set champ=6 where code='110_1245' ou update maTable set champ=6 where code='505_1245'

Merci
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 895
10 juil. 2008 à 13:07
Ben il suffit de définir et de rajouter une variable "CODERES" soit dans le script "bash" soit dans la ligne de "sed" :
CODERES=xxx
echo "update maTable set champ=6 where code='${CODERES}_ ${line}" >> resultat.txt

CODERES=xxx
sed -n "1d;s/.*/update maTable set champ=6 where code='${CODE}_&'/w sortie.txt" fichier.txt
;-))
0
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
10 juil. 2008 à 15:30
ok merci je test. Tu peux juste m'expliquer :

_&'/w

dans la ligne sed.
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 895 > pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024
10 juil. 2008 à 16:29
Pour l'éperluette (&) voir : http://www.commentcamarche.net/faq/sujet 9559 sed introduction a sed part ii#le metacaractere

Pour le "w" (flag write) voir : http://www.commentcamarche.net/faq/sujet 9536 sed introduction a sed part i#flags

Pour le "w", ici c'est une option de la commande de substitution "s", mais il existe aussi en tant que commande, voir : http://www.commentcamarche.net/faq/sujet 9536 sed introduction a sed part i#les commandes basiques 2

;-))
0
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
10 juil. 2008 à 16:46
Ok.
& : traiter toutes les chaines mis en correspondances
w : Pour ecrire la substitution dans un fichier

Merci
0