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 :

Usage de sed combiné à awk


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Par défaut Usage de sed combiné à awk
    Bonjour,

    voici mon petit problème :

    J'ai une variable var

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $var
    0.5 0.25 0.34
    J'ai un fichier test.dat

    Je souhaite substituer 0.25 de la variable var à cc du fichier test.dat

    J'essaye la commande suivante mais sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e "s/cc/$var | awk '{print $2}'/g" test.dat
    Si je fais la transformation suivante, cela marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var2=var | awk '{print $2}'
    sed -e "s/cc/var2/g" test.dat
    Mais j'aimerais avoir une seule ligne de code... Quelqu'un pourrait-il m'aider svp ?

    Merci d'avance,

    R.M.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Par défaut
    Bonjour,

    Voila en une seule ligne avec awk et sed.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/cc/'`echo $var|awk '{print $2}'`'/g' test.dat

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Par défaut
    Merci

    Quelle est la signification des symboles ` dans votre ligne de code ?

    RM.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Par défaut
    Dans cette version:
    sed -e "s/cc/$var | awk '{print $2}'/g" test.dat

    $var|awk'{print $2}' est simplement traité comme du texte et non comme une commande.

    Ce qui se trouve entre les ` est exécuté.
    L'ajout des ` permet à sed de prendre en argument le résultat de la commande se trouvant entre les `
    (ne pas non plus oublier le echo pour passer $var à awk)
    Dites moi si je ne suis pas clair

  5. #5
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Par défaut
    Merci c'est très clair...

    A noter que cette version du code fonctionne chez moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/cc/`echo $var|awk '{print $2}'`/g' test.dat
    Sinon j'obtiens

    au lieu de

    RM

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    il serait préférable de n'utiliser qu'une seule commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    echo "aa
    bb
    cc
    dd" | awk -vlaVar="$var" 'BEGIN{split(laVar,Tableau," ")} {if ( $0 ~ /cc/) {print Tableau[2]} else {print $0}; }'
    aa
    bb
    0.25
    dd
    Ça, c'est juste parce que je suis toujours un débutant en awk : je suis sûr que ça peut être mieux écrit...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Une petite variante:

    Fichier f:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var='0.5 0.25 0.34'
    var=${var% *};var=${var#* }
    awk -v av="$var" '/^cc$/{$0=av}1' f
    Devrait être un poil plus rapide sur de gros fichiers car la substitution de variable shell sera plus véloce qu'un split() awk. Mais bon, c'est du "poildecutage".

  8. #8
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ sed "s/cc/"$(echo $var |sed 's/.*\ \(.*\)\ .*/\1/')"/" test.dat
    aa
    bb
    0.25
    $
    ou meme plus portable encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ sed "s/cc/"`echo $var |sed 's/.*\ \(.*\)\ .*/\1/'`"/" test.dat 
    aa
    bb
    0.25
    $

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

Discussions similaires

  1. script shell : probleme avec sed et awk
    Par salseropom dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 05/06/2007, 11h57
  2. Script avec sed et awk
    Par arezki76 dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 04/01/2007, 14h56
  3. Aide sur les commandes sed et awk
    Par elkhy dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 20/06/2006, 08h22
  4. sed et awk sous windows/dos
    Par Jean-Matt dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 05/01/2006, 18h12

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