IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Extraire des valeurs d'un fichier


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 083
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 083
    Points : 271
    Points
    271
    Par défaut Extraire des valeurs d'un fichier
    Bonjour,
    J'ai un fichier texte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    server1 database1 user1 profiletarget1 
    server1 database1 user2 profiletarget2 
    server1 database2 user1 profiletarget3
    De chaque ligne je dois extraire:

    sid= database1

    Et pour chaque database
    user= usern
    profile=profiletargetn

    J'ai essayé avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for member in $(cat myfile.txt|grep server1|awk -F: '{print "sid="$2,"user="$3,"profile="$4}')
    do
    echo sid:$sid' user: '$user' profile:  '$profile
    done
    Sans résultat.

    Je veux determiner sid (database1) et faire des traitement pour les users et profiles dans cette base de données et ensuite passer au database2 et faire des traitement pour les users et profiles dans database2.
    Merci de votre aide.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ while read servn dbn usern profilen autre;do echo "Serveur : $servn    User: $usern";done <myfile.txt
    Serveur : server1    User: user1
    Serveur : server1    User: user2
    Serveur : server1    User: user1
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 539
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 083
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 083
    Points : 271
    Points
    271
    Par défaut
    Merci à vous.
    Mais ce n'est pas ça.
    Je veux deux boucles imbriquées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for database in (cat ....| grep |   sid) do
       for user, profile in (cat ....| grep | user= ;profile=) do
         echo "ALTER USER $user PROFILE $profile ; " >> fichier.sql
       done
    done
    D'avance merci.

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Pourquoi 2 boucles imbriquées ? ta machine est trop rapide ?

    Reformule ton besoin avec des exemples du genre en entrée j'ai ceci, et je veux en sortie cela...
    Cordialement.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 539
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    non, ça, for database in (cat ....| grep | sid) do c'est dégueulasse, et source d'erreurs.
    et c'est aussi un code erroné.

    => https://www.developpez.net/forums/d1...ourir-fichier/
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 083
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 083
    Points : 271
    Points
    271
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Pourquoi 2 boucles imbriquées ? ta machine est trop rapide ?

    Reformule ton besoin avec des exemples du genre en entrée j'ai ceci, et je veux en sortie cela...
    Merci pour ta réponse.

    Voilà à l'entré j'ai ce fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    server1 database1 user1 profiletarget1 
    server1 database1 user2 profiletarget2 
    server1 database2 user1 profiletarget3
    Je dois lire ce fichier pour trouver les bases de données(ici database1 et database2).
    Pour chaque base je dois exécuter autant de requêtes que les lignes comportant cette base.
    Pour la database1 il y a deux lignes, donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      ALTER USER user1 PROFILE profiletarget1 ;
      ALTER USER user2 PROFILE profiletarget2 ;
    Pour la database2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      ALTER USER user1 PROFILE profiletarget3 ;
    Donc à partir de mon fichier texte je dois constituer des lignes ALTER USER que j'enverrai dans un fichier monfichier.sql que j'exécute sous SQLPLUS.

    J'espère que mon besoin est bien exprimé et claire pour vous.

    Pourquoi deux boucles?
    1-pour lire les bases de données. 2-Dans chaque base modifier utilisateur et profile.
    Encore merci.

  8. #8
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Pourquoi deux boucles?
    1-pour lire les bases de données. 2-Dans chaque base modifier utilisateur et profile.
    Mais chaque ligne n'a qu'une base.
    Donc pourquoi 2 boucles ?
    Chaque ligne sait retrouver le serveur, la base, l'utilisateur et le profile...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ while read servn dbn usern profilen autre;do echo "ALTER USER $usern PROFILE $profilen ;";done <myfile.txt
    ALTER USER user1 PROFILE profiletarget1 ;
    ALTER USER user2 PROFILE profiletarget2 ;
    ALTER USER user1 PROFILE profiletarget3 ;
    Au pire, tu répartis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ while read servn dbn usern profilen autre;do echo "ALTER USER $usern PROFILE $profilen ;" >> "${dbn}.sql";done <myfile.txt
    $ cat database1.sql
    ALTER USER user1 PROFILE profiletarget1 ;
    ALTER USER user2 PROFILE profiletarget2 ;
    $ cat database2.sql
    ALTER USER user1 PROFILE profiletarget3 ;
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Et si tu tries ton fichier d'entrée sur le champs database (le 2ème champs), plus besoin de 2 boucles imbriquées.

    D'ailleurs, on ne voit pas trop ce que tu veux faire à chaque changement de database dans tes exemple de code.
    Cordialement.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 083
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 083
    Points : 271
    Points
    271
    Par défaut
    Merci à vous.
    Je vais tester aujourd'hui la solution de Flodelarab :répartir dans deux fichiers.

    Comment trier le fichier d'entrée sur le champs database?

    Cordialement.

  11. #11
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    ou si l'on reprend l'un des exemple de Flodelarab:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read servn dbn usern profilen autre;do echo "ALTER USER $usern PROFILE $profilen ;";done < <(sort -k2 myfile.txt)
    En respectant l'espace entre les 2 chevrons.
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Extraire des valeurs d'un fichier, help me !
    Par vincent1989 dans le forum R
    Réponses: 5
    Dernier message: 12/11/2012, 19h52
  2. Extraire des valeurs d'un fichier
    Par jal13 dans le forum Fortran
    Réponses: 2
    Dernier message: 14/12/2010, 17h29
  3. Extraire des valeurs d'un fichier avec AWK
    Par Maillon dans le forum Linux
    Réponses: 2
    Dernier message: 05/02/2009, 23h49
  4. Extraire des valeurs d'un fichier txt
    Par boby35 dans le forum Octave
    Réponses: 5
    Dernier message: 16/04/2008, 13h05
  5. Réponses: 11
    Dernier message: 31/03/2008, 20h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo