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 POSIX Discussion :

[pdksh] echo $var | awk


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de hucste
    Homme Profil pro
    IT en Arrêt Chronique de Sans-T !
    Inscrit en
    Juin 2016
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : IT en Arrêt Chronique de Sans-T !

    Informations forums :
    Inscription : Juin 2016
    Messages : 78
    Par défaut [pdksh] echo $var | awk
    Bonjour,

    Sous OpenBSD, pdksh - par defaut - :

    À la ligne de code shell suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "${line}" | cut -d':' -f2- | trim
    que je remplace aisément par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf '%s' "${line}" | awk -F ':' '{ gsub(/[[:space:]]*/, "", $2) ; printf "%s",$2 }'
    Néanmoins, je me dis - peut-être à tord - que je devrais pouvoir tout faire juste avec awk ; il me semble avoir un début de réponse mais je ne suis pas sûr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F ':' -v l="${line}" '{ gsub(/[[:space:]]*/, "", $2) ; printf "%s",$2 }'
    Le shell reste en attente...

    Une suggestion utile ?!
    Merci d'avance.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    Le shell reste en attente...
    Évidemment. Il n'y a pas de fichier en entrée. Donc il lit sur l'entrée standard et attend une entrée.

  3. #3
    Membre éprouvé Avatar de hucste
    Homme Profil pro
    IT en Arrêt Chronique de Sans-T !
    Inscrit en
    Juin 2016
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : IT en Arrêt Chronique de Sans-T !

    Informations forums :
    Inscription : Juin 2016
    Messages : 78
    Par défaut
    Évidemment...

    Donc, je peux oublier - puisqu'il faut lui injecter d'une manière ou d'une autre l'affichage de la valeur de la variable $line.

    Merci du rappel !

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Non non non. Je n'ai pas dit cela. Je dis que tu as mis l'information à traiter dans le script. Et pas à l'entrée du script. Ça va marcher. Mets le puzzle en ordre.

    Soit tu colmates l'entrée. Soit tu mets ton info en entrée.

  5. #5
    Membre éprouvé Avatar de hucste
    Homme Profil pro
    IT en Arrêt Chronique de Sans-T !
    Inscrit en
    Juin 2016
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : IT en Arrêt Chronique de Sans-T !

    Informations forums :
    Inscription : Juin 2016
    Messages : 78
    Par défaut
    Euh, je crois que je te comprend pas..
    ou du moins, si je comprends bien ce que tu me dis, tu me dis d'injecter la variable en entrée... or, le seul moyen que je connaisse est par l'injection d'un affichage - cat, echo, printf - ou en bash grâce au redirecteur '<<<'...
    autrement, oui, je ne comprends pas :p

    donc, hormis le fait de passer par une entrée précédent la commande 'awk', je ne saisis pas comment faire ?!


    D'ailleurs, je me rends compte que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf '%s' $line | awk -F ':' '{ printf $2 }'
    suffit largement

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    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 349
    Par défaut
    Non, les lignes avec awk que tu sembles valider ne font pas la même chose que ton cut initial:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo 'bob1:bob2:bob3' | cut -d':' -f2-
    bob2:bob3
    $ echo 'bob1:bob2:bob3' | awk -F: '{ printf $2 }'
    bob2
    par contre, en ksh, il me semble que ceci fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ line='bob1:bob2:bob3'
    $ echo "${line#*:}"
    bob2:bob3

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Cette commande awk -F ':' -v l="${line}" '{ gsub(/[[:space:]]*/, "", $2) ; printf "%s",$2 }' attend une entrée et tu n'en a pas. Dis lui d'aller voir Dave Null.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F ':' -v l="${line}" '{ gsub(/[[:space:]]*/, "", $2) ; printf "%s",$2 }' /dev/null
    Et là, ton script est exécuté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ toto=koko
    $ awk "BEGIN{ print \"$toto\";}"
    koko
    Le script ci-dessus n'a pas d'entrée et pourtant n'en attend pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk "BEGIN{ print 3*2;}" /dev/null
    6
    $ awk "{ print 3*2;}" /dev/null
    $
    Ce dernier script attend une entrée, et en trouve une.
    Aucune sortie car le fichier est vide.

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

Discussions similaires

  1. Echo "<?=$var?>" dans HTML
    Par lynnaryas dans le forum Langage
    Réponses: 3
    Dernier message: 19/04/2012, 18h40
  2. Ecrire $var dans un fichier avec cmd echo ?
    Par jojodeparis dans le forum Langage
    Réponses: 4
    Dernier message: 18/10/2010, 11h36
  3. awk : protection d'une var issue d'un script sh
    Par Fung999 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 02/03/2008, 19h02
  4. Envoyer un message icmp (Echo Request)
    Par ovdz dans le forum Développement
    Réponses: 5
    Dernier message: 19/06/2003, 14h14
  5. [langage] awk et sed dans script perl
    Par scoti dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2003, 18h26

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