Traitement fichier avec SED ,AWK ou autres

pcsystemd Messages postés 734 Statut Membre -  
pcsystemd Messages postés 734 Statut Membre -
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

2 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    1. pcsystemd Messages postés 734 Statut Membre 23
       
      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
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    1. pcsystemd Messages postés 734 Statut Membre 23
       
      ok merci je test. Tu peux juste m'expliquer :

      _&'/w

      dans la ligne sed.
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > pcsystemd Messages postés 734 Statut Membre
         
        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
      2. pcsystemd Messages postés 734 Statut Membre 23 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Ok.
        & : traiter toutes les chaines mis en correspondances
        w : Pour ecrire la substitution dans un fichier

        Merci
        0