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 :

Filtrage de ligne et valeurs dans plusieurs fichiers


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 31
    Par défaut Filtrage de ligne et valeurs dans plusieurs fichiers
    Bonjour,

    J'aurai besoin de votre aide concernant l'écriture de quelques lignes de commande qui m'aideraient à réaliser ce qui suit :

    Je dispose de n fichiers texte, dans lesquels se trouve à une ligne donnée, le contenu suivant (il n'y a rien d'autres sur la ligne en question) :

    "Yield grain or fruit (0% water) = 9.01 t/ha"

    Les valeurs sont différentes pour chaque fichier.

    Je voudrais, pour chacun de ces fichiers, récupérer la valeur et stocker ces valeurs dans une fichier "stock.txt".

    J'espère que l'explication est suffisament claire.

    Merci beaucoup par avance, de votre aide

    nicolas823

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 851
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 851
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nicolas823 Voir le message
    Bonjour,

    J'aurai besoin de votre aide concernant l'écriture de quelques lignes de commande qui m'aideraient à réaliser ce qui suit :

    Je dispose de n fichiers texte, dans lesquels se trouve à une ligne donnée, le contenu suivant (il n'y a rien d'autres sur la ligne en question) :

    "Yield grain or fruit (0% water) = 9.01 t/ha"

    Les valeurs sont différentes pour chaque fichier.

    Je voudrais, pour chacun de ces fichiers, récupérer la valeur et stocker ces valeurs dans une fichier "stock.txt".

    J'espère que l'explication est suffisament claire.

    Merci beaucoup par avance, de votre aide

    nicolas823
    Bonjour
    Quelle valeur ? 0% ou bien 9.01 t/ha ???
    Veux-tu aussi récupérer l'unité (t/ha) ou bien celle-ci est tout le temps la même ???
    Bon, déjà en faisant un truc comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    cat fichier |while read ligne
    do
        p1=$(echo "$ligne" | cut -f1 -d=)
        p2=$(echo "$ligne" | cut -f2 -d=)
    done
    Tu auras dans p1 tout ce qui est à gauche de "=" et dans p2 tout ce qui est à droite. Ensuite, en utilisant la même méthode sur p1 et/ou p2 tu pourras récupérer 0% et/ou 9.01t/ha...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 31
    Par défaut
    Merci pour votre réponse.

    Mon objectif est de récupérer le "9.01". Seule la valeur m'intéresse (oui, l'unité ne change pas).

  4. #4
    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,

    Essaie ça : grep -h -Po '"Yield grain or fruit \(.*% water\) = \K[^ ]*' fic*

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 31
    Par défaut
    Merci, mais le résultat est toujours vide.

  6. #6
    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
    Citation Envoyé par nicolas823 Voir le message
    Merci, mais le résultat est toujours vide.
    Il nous faudrait sûrement un échantillon d'un de tes fichiers...

    Chez moi avec ton exemple ça marche :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ head fic*
    ==> fic <==
     
    "Yield grain or fruit (0% water) = 9.01 t/ha"
     
    ==> fic1 <==
     
    "Yield grain or fruit (5% water) = 5.1 t/ha"
     
    ==> fic2 <==
     
    "Yield grain or fruit (33% water) = 10.00 t/ha"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ grep -h -Po '"Yield grain or fruit \(.*% water\) = \K[^ ]*' fic*
    9.01
    5.1
    10.00

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 851
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 851
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nicolas823 Voir le message
    Mon objectif est de récupérer le "9.01". Seule la valeur m'intéresse (oui, l'unité ne change pas).
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    cat fichier |while read ligne
    do
        val=$(echo "$ligne" | cut -f2 -d= | cut -f2 -d' ')
       echo $val
    done

    Bien entendu, je m'appuie sur l'hypothèse que ta ligne contient un et un seul signe "=" ; et que le nombre "9.08" est encadré d'un espace avant et un après...

    Sinon en se basant sur l'hypothèse que la valeur est l'avant dernier élément de la ligne (l'unité en étant la dernière), il y a aussi ceci
    awk '{print $(NF - 1)}' fichier
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 31
    Par défaut
    Merci beaucoup à tous pour vos réponses. !

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

Discussions similaires

  1. Plusieurs lignes de valeurs dans une variable
    Par darkkpim dans le forum CodeIgniter
    Réponses: 5
    Dernier message: 09/10/2013, 11h39
  2. [XL-2003] récupérer valeur d'une cellule, dans plusieurs fichiers placés dans des sous-dossiers
    Par greenfire15 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/08/2012, 09h42
  3. Réponses: 4
    Dernier message: 21/07/2009, 14h08
  4. Réponses: 2
    Dernier message: 05/09/2007, 22h10
  5. Recherche de valeurs dans plusieurs fichiers
    Par Trooper2 dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 04/07/2007, 12h04

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