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 :

Extraction à partir d'une variable


Sujet :

Shell et commandes POSIX

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 375
    Par défaut Extraction à partir d'une variable
    Bonjour,

    Je souhaiterais extraire les mots contenus dans une variable et les intégrer dans un fichier en séquentiel exemple

    Contenu de ma variable
    Mon fichier
    J'ai essayé de le faire à partir de awk avec des boucles etc... mais je n'y arrive pas avez-vous une idée pour faire ça ?

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Quel shell ? Quel système ?

    À défaut et en bash :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ var='aaaa bbbb cccc'
     
    $ echo -e "${var}"
    aaaa bbbb cccc
     
    $ echo -e "${var// /\n}"
    aaaa
    bbbb
    cccc

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 375
    Par défaut
    Bonjour Zipe31

    Oupsss en ksh et système AIX 5.3

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 375
    Par défaut
    Bon j'arrive à mettre en sequence les mots contenus dans mon echo comme suit

    Résultat de l'echo
    Par contre impossible de le faire à partir de ma variable

    Avez vous une idée SVP

  5. #5
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     echo $var  | awk ' { for( i=0 ; i< NF ; i++ ) { print $i } }'

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 375
    Par défaut
    Merci Fréderic
    Par contre lorsque j'exécute la commande l'echo me retourne le contenu de la variable et le awk la même chose mais sous forme de séquence

    Résultat de ta commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (root)->/ : echo $var  | awk ' { for( i=0 ; i< NF ; i++ ) { print $i } }'
    aaaa bbbb cccc dddd
    aaaa
    bbbb
    cccc
    Est il possible de ne pas avoir le retour de l'echo?

    Résultat attendu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (root)->/ : echo $var  | awk ' { for( i=0 ; i< NF ; i++ ) { print $i } }'
    aaaa
    bbbb
    cccc
    Serait il possible de m'expliquer le fonctionnement de la commande awk avec le for

    Merci d'avance

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Normalement ksh devrait savoir évaluer l'expansion des paramètres (cf mon 1er message) non ?

    Sinon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ echo "${var}" | sed 's/ /\n/g'
    aaaa
    bbbb
    cccc
     
    $ echo "${var}" | tr ' ' '\n'
    aaaa
    bbbb
    cccc

  8. #8
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Par défaut
    Le problème vient du fait que $0 correspond à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     echo $var  | awk ' { for( i=1 ; i<= NF ; i++ ) { print $i } }'
    En ce qui concerne la boucle, c'est un for "classique"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for ( operation de départ ; tant que condition ; fait à chaque itération )
    {
     operations de la boucle
    }

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 375
    Par défaut
    Bonjour Frederic un grand merci pour ton explication toute fois pour être sur de la compréhension de la procédure 3 petites questions
    1/ pour le i++ je suppose que c'est une incrémentation de +1 c'est bien ça?

    2/est il possible d'utiliser autre chose que le for par exemple le if ou until ou while etc... ?

    3/as tu un doc sur l'utilisation du awk je veux dire un doc avec un max d'exemple

    Merci encore pour ton aide je te souhaite une excellente journée

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 375
    Par défaut
    Re Frederic

    J'ai adapté la commande avec ajout de commentaire en début de chaque ligne jusque la tout va bien par contre je souhaite ajouter en fin de ligne le commentaire suivant " Sur Système " la aussi ça marche mais en plus je voudrais ajouter le nom du système j'ai pensé utiliser la commande hostname mais ça ne marche pas alors je me suis dit qu'il faudrait peut être utiliser une variable qui contiendrait le nom du système mais la non plus ça marche pas je te joins ma ligne de commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    nom_hote=`hostname`
     
    echo $noms_users  | awk ' { for( i=1 ; i<= NF ; i++ ) { print "Nom du compte : " $i " Sur Système " $nom_hote } }' >test
     
    Résultat de mon fichier en sortie
     
    Nom du compte : user1 Sur Système
    Nom du compte : user2 Sur Système
    Nom du compte : user3 Sur Système
    Humm j'ai fait une nouvelle tentative le truc bizarre je vois bien la variable traduite dans la commande lors de l'exécution mais elle n'ai pas présente sur les lignes de mon fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    echo $noms_users  | awk ' { for( i=1 ; i<= NF ; i++ ) { print "Nom du compte : " $i " Sur Système " '${nom_hote}' } }' >/
     
    Résultat de la commande awk
     
    + awk  { for( i=1 ; i<= NF ; i++ ) { print "Nom du compte : " $i " Sur Système " MONSYSTEME } }
    + 1> /test
     
    Mon fichier en sortie
     
    Nom du compte : user1 Sur Système
    Nom du compte : user2 Sur Système
    Nom du compte : user3 Sur Système
    N'y a t il pas une histoire de côte ou double côte??

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Bonjour.

    ça a complètement dérivé depuis la demande initiale!

    Du coup, tu peux revenir à quelque chose de beaucoup plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    noms_users="aaaa bbbb cccc dddd"
    nom_hote=$(hostname)
     
    for user in ${noms_users} ; do
        echo "Nom du compte : ${user} Sur Système ${nom_hote}"
    done > "out.txt"

    Citation Envoyé par AAWOOPY56 Voir le message
    Humm j'ai fait une nouvelle tentative le truc bizarre je vois bien la variable traduite dans la commande lors de l'exécution mais elle n'ai pas présente sur les lignes de mon fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $noms_users  | awk ' { for( i=1 ; i<= NF ; i++ ) { print "Nom du compte : " $i " Sur Système " '${nom_hote}' } }' >/test
    à un poil près, c'était bon!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $noms_users  | awk ' { for( i=1 ; i<= NF ; i++ ) { print "Nom du compte : " $i " Sur Système  '${nom_hote}'" } }' >/test
    en effet, la valeur de nom_hote doit être entre guillemets sinon elle est vue comme une variable awk... non valuée, donc vide.

    L'autre possibilite de passer une variable à awk, c'est de le dire explicitement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo coucou | awk -v bibi=3 '{print bibi}'
    echo $noms_users  | awk -v name_hote=${nom_hote} ' { for( i=1 ; i<= NF ; i++ ) { print "Nom du compte : " $i " Sur Système  " name_hote } }' >/test
    N'y a t il pas une histoire de côte ou double côte??
    Si fait! La côte est dure!

  12. #12
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Par défaut
    Tu peux passer ta variable en argument comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     awk -v mavar="MaSuperVariable" ' { print mavar " "  $0 }' FICHIER

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 375
    Par défaut
    Ok super merci à vous pour toutes ses explications le awk c'est vraiment puissant je vais essayer d'appronfondir car pour moi c'est tout nouveau j'aurai certainement encore besoin de vous soliciter

    Encore un grand merci

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/07/2006, 10h03
  2. Valeur par defaut a partir d'une variable vba ?
    Par Alpha31 dans le forum Access
    Réponses: 2
    Dernier message: 06/06/2006, 16h00
  3. Réponses: 1
    Dernier message: 02/06/2006, 21h18
  4. vérifier un fichier à partir d'une variable
    Par pharaonline dans le forum Langage
    Réponses: 5
    Dernier message: 28/05/2006, 20h51
  5. Exécuter une requête à partir d'une variable
    Par Poussy-Puce dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/03/2006, 14h15

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