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 :

Passer paramètre dans Awk


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 45
    Points : 37
    Points
    37
    Par défaut Passer paramètre dans Awk
    Bonjour,

    Ma question est simple j'ai écrit un script faisant appel à awk de manière itérative, j'aurai aimé pouvoir l'écrire de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #!/bin/bash
     
    for (( i=1; i<=10; i++ ))
    do
    cat data | gawk '{print '$i'}' > ${fin}"_"${i}
    done
    mais sans succès, la syntaxe {print '$i'} est incorrecte.

    J'ai essayé en mettant différent types de crochets, parenthèses, sans succès ('$i',$i,i,'${i}',${i}...).
    Donc du coup j'ai écrit ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cat data | gawk '{print $1}' > ${fin}"_"1 
    cat data | gawk '{print $2}' > ${fin}"_"2
    ...
    Cela marche, mais ce n'est guère pratique, ni glorieux.

    Ma question est la suivante, comment faire passer un entier en entrée d'une commande Gawk ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    Salut,

    Comme cela ?

  3. #3
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Bonsoir,

    Pour les guillemets, il faut comprendre comment ils fonctionnent. La fonction print de awk nécessite des double-quotes pour du texte direct: print "toto". De plus, il faut sortir des simple-quotes pour que la variable de shell $i soit interprétée. Ce qui donne:
    Et puis pour passer des variables shell à la commande awk, c'est comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -v awk_var1=shell_var1 -v awk_var2=shell_var2 '{prog...}'

  4. #4
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    jmelyn
    maître es AWK

    PS : vais y regarder de plus près à awk je crois

  5. #5
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Si t'es espère en Windows et tu travailles Linusk en plus, c'est super. Je dois pas toucher une bille chez MS, vu que j'y vais jamais.

  6. #6
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    jmelyn

    Expert en windows ?
    Expert en bidouille pour essayer de faire marcher un bousin dont je ne comprends pas la moitié ca oui

    Sinon Bidouilleur es bidouille en nux
    Ca ne fait qu'environ 18 mois que je m'y suis mis au manchot
    J'ai quasi abandonné la fenêtre depuis (sauf pour les jeux et encore... )

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 45
    Points : 37
    Points
    37
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gawk -v i=${i} '{print $i}'
    Avec cette ligne c'est nickel.

    Par contre, juste pour info, la ligne :
    ne passe pas chez moi, et m'imprime un fichier de 1 !

  8. #8
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Il devrait suffire d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ a=100
    $ echo 1 | awk -v b=$a '{print b}'
    100
    Quant au code à guillemets, ça marche chez moi (Linux):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ a=100
    $ echo 1 | awk '{print "'$a'"}'
    100

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 45
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par jmelyn Voir le message
    Il devrait suffire d'écrire:
    100[/code]Quant au code à guillemets, ça marche chez moi (Linux):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ a=100
    $ echo 1 | awk '{print "'$a'"}'
    100
    Effectivement tu as tout à fait raison ! Mais dans mon cas précis, il serait plus juste d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     gawk '{print $"'$i'"}' # au lieu de
     gawk '{print "'$i'"}'
    Le premier cas me sort le champ i alors que le deuxième me donne la valeur de i.

  10. #10
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    J'ai relu ton post initial. J'avais oublié ce que tu voulais faire. Le code nettoyé est:
    Moins de guillemets est meilleur pour la santé.
    Si tu tournes sur Linux, tu peux utiliser awk plutôt que gawk: awk est un lien symbolique sur /bin/gawk.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 45
    Points : 37
    Points
    37
    Par défaut


    Oui, sans les guillements j'ai de suite moins mal au yeux

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

Discussions similaires

  1. JSF Passer paramètre dans Xhtml
    Par igloof dans le forum JSF
    Réponses: 2
    Dernier message: 12/03/2009, 08h25
  2. Réponses: 1
    Dernier message: 21/03/2006, 14h29
  3. passer un & dans les paramètres de la page
    Par see++ dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 08/03/2006, 15h48
  4. Passer un paramètre dans le script
    Par ipeteivince dans le forum Windows
    Réponses: 2
    Dernier message: 02/03/2006, 17h00
  5. [C#] Passer un dataset en paramètre dans un WinForm enfant
    Par iDaaX dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/01/2005, 21h55

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