Rechercher : dans
Par :

Traitement fichier avec SED ,AWK ou autres

Dernière réponse le 10 jui 2008 à 16:46:35 pcsystemd, le 10 jui 2008 à 09:45:50 
 Signaler ce message aux modérateurs

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

L'accès au savoir est la première liberté que chaque homme devrait avoir.

Configuration: Linux Debian
Mozilla 1.8.1.14

Meilleures réponses pour « Traitement fichier avec SED ,AWK ou autres » dans :
Sed - Supprimer une ou plusieurs lignes d'un fichier Voir Supprimer une (ou plusieurs) ligne(s) d'un fichier Syntaxe sed '{[/]||[/]}d' sed '{[/][,][/]d' /.../ = délimiteurs n = le numéro de ligne chaîne = la chaîne contenue dans la...
Sed - Numérotation de lignes VoirNumérotation * Numéroter les lignes (équivalent à "cat -n fichier.txt") sed = fichier.txt L'inconvénient c'est que l'affichage se fait sur 2 lignes. Donc pour palier à ce petit "défaut" sed = fichier.txt | sed 'N;s/\n/\t/' Numéroter les...
Sed - Substitution VoirSubstitution Substitution basique Simple Globale Ciblée Substitution conditionnée Simplee Avancée Bloc Avancéé Substitution basique Simple - 1ère occurrence (de chaque ligne) rencontrée uniquement sed 's/la/LA/' fichier.txt
Sed - Introduction à SED - Part I VoirSED - The Stream EDitor - Part I Ce document est une introduction à la pratique et à l'utilisation de l'éditeur de flux "SED", qui essaie de couvrir certaines fonctionnalités assez méconnues, pour ne pas dire "quasi inconnues", qui font de "SED" un...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
Fichier RTF VoirFormat RTF Un fichier RTF est un fichier de traitement de texte au format standard Rich Text Format. L'intéret du format RTF est de pouvoir être lu par la quasi-totalité des applications de bureautique et sur tous les systèmes d'exploitation...
Fichier DOC VoirFormat DOC Un fichier DOC est un fichier de traitement de texte de la suite bureautique Microsoft Office. Comment lire un fichier DOC ? Il peut néanmoins être ouvert avec Word Viewer ou avec la suite gratuite et libre OpenOffice.org. OpenOffice...

1

jipicy, le 10 jui 2008 à 11:03:17

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$
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

2

pcsystemd, le 10 jui 2008 à 12:33:51

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

Répondre à pcsystemd

3

jipicy, le 10 jui 2008 à 13:07:43

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
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

4

pcsystemd, le 10 jui 2008 à 15:30:03

Ok merci je test. Tu peux juste m'expliquer :

_&'/w

dans la ligne sed. L'accès au savoir est la première liberté que chaque homme devrait avoir.

Répondre à pcsystemd

5

jipicy, le 10 jui 2008 à 16:29:17

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

;-)) JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

6

 pcsystemd, le 10 jui 2008 à 16:46:35

Ok.
& : traiter toutes les chaines mis en correspondances
w : Pour ecrire la substitution dans un fichier

Merci L'accès au savoir est la première liberté que chaque homme devrait avoir.

Répondre à pcsystemd
Collection CommentÇaMarche.net