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 :

[bash] Substituer le résultat d'une commande dans une variable en texte


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut [bash] Substituer le résultat d'une commande dans une variable en texte
    Bonjour,

    Je cherche à remplacer une variable par le résultat de sa commande pour la réutiliser ensuite mais en ne sélectionnant qu'une partie de la ligne de réponse.

    Voici ce que je cherche à faire:
    result="awk 'NR==2' infile"
    echo "${result:5}" >> outfile

    Le problème est que la command "${result:5}" va couper extraire le texte dans "awk 'NR==2' infile" mais dans son résultat.

    Pour être plus explicite:
    infile :
    R2001001
    39.47|0.85|1535|0
    40.64|0.58|1534|0
    39.20|1.21|1533|0
    39.56|1.66|1548|0
    37.84|0.67|2574|0

    result est la ligne 2
    39.47|0.85|1535|0

    et je cherche à sélectionner une partie de cette ligne uniquement


    Est-ce que quelqu'un sait comment faire cela?

    Merci

  2. #2
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Quelle partie veux-tu extraire exactement ?
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    En fait, j'ai ce bloc de résultat un bon milier de fois et je veux extraire à chaque fois le dernier bloc (0 dans l'exemple) de chaque ligne pour ensuite réorganiser les données.

  4. #4
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ cat plop 
    R2001001
    39.47|0.85|1535|0
    40.64|0.58|1534|0
    39.20|1.21|1533|0
    39.56|1.66|1548|0
    37.84|0.67|2574|0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ awk 'NR==2' plop 
    39.47|0.85|1535|0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ awk -F'|' 'NR==2 { print $NF }' plop 
    0
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Excuses-moi pour les questions bêtes, mais plop est le nom que tu donnes à la variable? Et que fait cat?
    Autre question:
    - comment je fais du coups pour appeler mon fichier "infile" que je dois questionner?
    - n'y a t'il pas un moyen simple avec echo ou eval de considérer le résultat d'une commande comme du texte? Comme ça je pourrais réutiliser le résultat dans une autre commande sans qu'il aille lire la première commande?

    Merci

  6. #6
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par Erculpoiro Voir le message
    mais plop est le nom que tu donnes à la variable?
    Non, c'est le nom que j'ai donné à mon fichier pour l'exemple.

    Et que fait cat?
    Là aussi, c'est juste pour l'exemple et afficher le contenu de mon fichier "plop"

    Autre question, comment je fais du coups pour appeler mon fichier "infile" que je dois questionner?
    Pour reprendre ton exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F'|' 'NR==2 { print $NF }' infile > outfile
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour ces réponses. ça marche bien.

    En fait, je dois maintenant mettre les résultats (la fin de chaque ligne) côte à côte (espacé d'un tab) sur une même ligne. Je pensais qu'il me suffisant de mettre sur une même ligne de code plusieurs commande mais ça ne semple pas si simple.

    Est-ce que tu aurais encore une solution à cela?

    Merci

  8. #8
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    En reprenant ton fichier "infile" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    awk -F'|' 'NR!=1 { printf "%s ", $NF }' infile 
    0 0 0 0 0
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour ces réponses.

    Je pensais réussir à finir ma boucle avec ce petit coup de main mais je ne maîtrise pas encore assez bien awk. Si tu peux encore me guider pour le dernier pas, c'est très volontiers!

    Je dois extraire les valeurs des lignes 1 à 6 sur une ligne (comme tu viens de me le montrer), mais ensuite je dois répéter ceci pour les lignes 7 à 12 sur une nouvelle ligne, ensuite 13 à 18, etc

    Saurais-tu faire cela?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Bonjour,

    pourquoi ces lignes là ?
    pourquoi pas les autres lignes ?

    elles correspondent, ou pas, à un motif ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Pardon, je me suis trompé, il me faut toutes les lignes par séquences de 6.

  12. #12
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    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 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour N_BaH,

    A priori, son fichier est de la forme:
    1ère ligne:
    REFERENCE
    5 lignes suivantes les valeurs (dont seule la dernière est intéressante)
    et on recommence.

    Allez Erculpoiro, un petit effort, a la rigueur, fait le nous au moins sous forme algorithmique...
    Cordialement.

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Désolé de vous décevoir mais là je sèche vraiment...

  14. #14
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '2~6{s/.*|//;N;s/\n.*|/ /;N;s/\n.*|/ /;N;s/\n.*|/ /;N;s/\n.*|/ /;N;s/\n.*|/ /;p}' infile
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  15. #15
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    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 287
    Points : 12 744
    Points
    12 744
    Par défaut
    D'après son post #9, j'aurai plus vu pour par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $ cat plop
    R2001001
    39.47|0.85|1535|0
    40.64|0.58|1534|0
    39.20|1.21|1533|0
    39.56|1.66|1548|0
    37.84|0.67|2574|0
    R2001001
    39.47|0.85|1535|0
    40.64|0.58|1534|0
    39.20|1.21|1533|0
    39.56|1.66|1548|0
    37.84|0.67|2574|0
    R2001001
    39.47|0.85|1535|0
    40.64|0.58|1534|0
    39.20|1.21|1533|0
    39.56|1.66|1548|0
    37.84|0.67|2574|0
    un résultat comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     $ sed -n 'N;N;N;N;N;s/\n[0-9|.]\+|\([0-9.]\)/ \1/g;p' plop
    R2001001 0 0 0 0 0
    R2001001 0 0 0 0 0
    R2001001 0 0 0 0 0
    ou la même en awk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ awk -F\| '/^[^0-9.|]/ && NR!=1 {print ""} {printf "%s ",$NF} END{print ""}' plop
    Mais bon...
    Cordialement.

  16. #16
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    ou la même en awk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ awk -F\| '/^[^0-9.|]/ && NR!=1 {print ""} {printf "%s ",$NF} END{print ""}' plop
    Mais bon...
    Excellent. c'est propre et super efficace. Merci beaucoup!

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

Discussions similaires

  1. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  2. Réponses: 4
    Dernier message: 02/07/2008, 11h32
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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