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 :

Problème awk pour récuperer des champs


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Par défaut Problème awk pour récuperer des champs
    Bonjour,
    je souhaite récuperer le champs $2 sous certaines conditions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     for nom in $(awk 'BEGIN{FS=";"}{print $1}' < verif2.log )
     do
     
     for compte in $(awk 'BEGIN{FS=";"}{print $1}' < verif1.txt )
     
     do
     
    if [ $nom = $compte ]
     then
    # awk 'BEGIN{FS=";" ; nom_exp=$nom }{$1 == nom_exp} {print $2}' verif1.txt > resultat_final.log
    # awk '{if ($1 == $nom) {print $2} fi }' verif1.txt > resultat_final.log
     fi
     done
     done
    Merci pour la réponse

  2. #2
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Par défaut awk et comparaison fichiers
    bonjour,
    j'ai testé les deux techniques (voir dans le commentaire du code shell #mais ça ne marche pas)
    pouvez-vous me dire comment je pourrais comparer la valeur d'une variable avec le premier champs d'un fichier , en cas d'égalité je récupere le deuxieme champs du fichier.?
    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    for nom in $(awk 'BEGIN{FS=";"}{print $1}' < verif2.log )
     do
     
     for compte in $(awk 'BEGIN{FS=";"}{print $1}' < verif1.txt )
     
     do
     
    if [ $nom = $compte ]
     then
    ##############################################
    awk 'BEGIN{FS=";" ; nom_exp=$nom }{$1 == nom_exp} {print $2}' verif1.txt > resultat_final.log
    awk '{if ($1 == $nom) {print $2} fi }' verif1.txt > resultat_final.log
    ################################################### 
    fi
     done
     done

  3. #3
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Bonjour,
    Utilises les balises CODE pour rendre la lecture de ton code plus facile.

    Je n'ai pas la possibilité de tester, mais il me semble que tes simples cotes '...' empêchent l'interprétation de la variable $nom par le shell.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Par défaut
    zooro a raison les cotes "bloque" l'interpretation de tes variables shell ....

    il te faut utiliser la passation d'argument avec awk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     -v var=val
           --assign var=val
                  Assign the value val to the variable var, before execution of the  program  begins.
                  Such variable values are available to the BEGIN block of an AWK program.
     
     
    soite :
    awk -v var_awk=$var_shell 'prog awk'

  5. #5
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Par défaut
    j'ai modifié la partie correspondantes :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for nom in $(awk 'BEGIN{FS=";"}{print $1}' < verif2.log )
     do
     
     for compte in $(awk 'BEGIN{FS=";"}{print $1}' < verif1.txt )
     
     do
    if [ $nom = $compte ]
     then
    ###########################################
    awk '{FS=";"}{if ($1 =='$nom') {print $2} fi}' verif1.txt > resultat_final.log
    #########################################
    le resultat :
    The input line number is 1. The file is verif1.txt.
    The source line number is 1.
    awk: A statement occurred that is not valid

  6. #6
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par ab_2006
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{FS=";"}{if ($1 =='$nom') {print $2} fi}' verif1.txt > resultat_final.log
    le resultat :
    The input line number is 1. The file is verif1.txt.
    The source line number is 1.
    awk: A statement occurred that is not valid
    Euh... il faudrait peut-être mettre des guillements autour de ton $nom, non ?
    Et en plus, imagine que $nom="bla bla) bla". Après interprétation du shell, tu pourrais avoir un code awk du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {FS=";"}{if ($1 ==bla bla) bla) {print $2} fi}
    On comprend qu'il n'apprécie pas

Discussions similaires

  1. Requête SQL pour obtenir les intitulés des champs d'une table
    Par Zakapatul dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/12/2008, 09h51
  2. Réponses: 1
    Dernier message: 22/11/2008, 10h36
  3. Réponses: 2
    Dernier message: 08/08/2007, 08h57
  4. cherche requette pour trouver le nom des champs dans une table
    Par maverick56 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/07/2007, 10h28
  5. Requête pour récupérer le nom des champs
    Par legillou dans le forum JDBC
    Réponses: 1
    Dernier message: 08/02/2006, 16h09

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