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

Linux Discussion :

Awk - interpréter l'entrée standard


Sujet :

Linux

  1. #1
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut Awk - interpréter l'entrée standard
    bonjour,
    je voudrais intégrer un script awk à l'intérieur d'un script bash. Comme solution je pensait utiliser la commande document en ligne <<- de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function transform ()
    {
    	awk <<-END_AWK
    	BEGIN { print "*** debut ***" }
    	END { print "----- fin -----" }
    END_AWK
    }
    mais apapremment awk ne prend sait pas interpréter son entrée standard. Comment puis-je faire ?

    merci

  2. #2
    Membre chevronné

    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
    Points : 1 803
    Points
    1 803
    Par défaut
    que cherche tu as faire exactement , car je ne vois pas bien la ce que tu desire.
    Recuperer la sortie d'une commande pour la traiter avec AWK ? :
    commande | awk ' BEGIN{...}{...}END{....}' !

    dans ton exemple tu as oublié les '

  3. #3
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    je voudrais que awk lise le code à interpréter sur son entrée standard. La commande <<- de bash va envoyer les texte du script courant sur l'entrée standr de la commande awk jusqu'à ce qu'il rencontre END_AWK. Je voudrais que awk l'interprète.
    En fait donc mon script j'ai 2 variable $dat et $filein et je voudrais remplcer des partie de $filein par des aprties de $data
    dans la section END_AWK, je pensait pouvoir y mettre les variables $data et $filein (je ne sais pas encore trop commment) et faire interpréter le tout à awk.

  4. #4
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 269
    Points
    269
    Par défaut
    J'ai pas tout compris, mais tu peux insérer des variables d'environnment dans awk, de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gawk 'BEGIN { print "*** '$VAR1' ***" }; END { print "----- '$VAR2' -----" };'
    C'est-à-dire, en refermant puis en réouvrant avec une simple quote la commande protégée de awk

  5. #5
    Membre chevronné

    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
    Points : 1 803
    Points
    1 803
    Par défaut
    heuu pas tres claire pour moi tout cela ...
    pour recuperer l'entrée standart :
    echo "bonjour" | awk ..................................

    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     while read entrer
    do
    if [[ $entrer == "AWK-END" ]]
     then 
         break ;
    fi
    echo $entrer | awk ...............................
    done
    le passage de parametre a awk se fait via l'option -v variable_awk=valeurt
    avec variable_awk et utilisable dans le script awk .....

    si tu veut lire l'entrer standart tu peut aussi faire :

    awk '{print $0}' /dev/stdin

    il faudra terminer par un CTRL-D .....

    sinon et encore :

    awk '{ print $0 }' << AWK-END
    ceci est la ligne 1
    ceci la 2
    AWK-END

    .....

  6. #6
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    en fait je suis d'accord, je pourrais très bien faire le script de cette manière :
    gawk 'BEGIN{...}....END{....}'
    Mais je pense que le script awk sera assez conséquent et donc pour plus de clarté j'aurais voulu faire des sauts de lignes et des tabulation, sans passer par un fichier annexe qui contiendrais ce script. c'est pour ça que j'aurais voulu l'intégré de cette mnaière dans le scipt bash. Mais bon je pense que je me complique la vie il doit y avoir une autre solution.
    merci en tout cas

  7. #7
    Membre chevronné

    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
    Points : 1 803
    Points
    1 803
    Par défaut
    bin tu peut !

    awk '
    BEGIN
    {
    print .....
    }
    {
    mon corps de programme avec mise en page
    }
    END
    {
    pied de prog
    } '

    cela ne pose pas de problème !

  8. #8
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    Rolala !! je pas réveillé moi ce matin ! merci beaucoup
    Sinon, j'avais trouvé comment faire avec perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function transform2 ()
    {
    	perl <<-END_PERL
    	print "script perl";
    	print "2222222";
    	print "3333333"
    END_PERL
    }
    je vais peut être rester sur cette solution en perl car sera plus simple pour mon script.

    merci encore

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

Discussions similaires

  1. awk ou sed : Supprimer argument entre doubles quotes sur une ligne de fichier
    Par SuperJoker dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 18/05/2014, 22h08
  2. EXPDP - IMPDP entre Entreprise et Standard 11g
    Par Aleck dans le forum Import/Export
    Réponses: 1
    Dernier message: 22/08/2011, 16h37
  3. Réponses: 6
    Dernier message: 13/03/2010, 11h02
  4. différence entre un dll standard et un activex dll
    Par TaymouWan dans le forum Windows
    Réponses: 6
    Dernier message: 28/10/2009, 01h56
  5. AWK: faire une comparaison exacte entre 2 strings
    Par farphe dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 14/01/2009, 21h54

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