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 :

Grep comparaison de valeur


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Par défaut Grep comparaison de valeur
    Bonjour à tous,

    j'essaie de parser un fichier avec grep, je voudrais récupérer toutes les lignes de mon fichier où la valeur "DP" est superieure ou égale à 10. Voici un exemple de ligne (elles sont toutes de cette forme):

    chr1 368 . A T 14.2 . DP=3;AF1=0.5;AC1=1;DP4=0,1,0,2;MQ=42;FQ=15.4;PV4=1,0.31,0,0.33 GTL:GQ 0/1:44,0,47:45

    DP est donc dans la colonne 8, j'ai commencé par faire ça :

    grep "DP=10\|DP=11\|DP=12\|DP=13\|DP=14\|DP=15" input.txt > output.txt


    ça fonctionnne mais c'est assez... moche (et les valeurs peuvent monter très haut...).

    Y a t'il un moyen de faire un test avec grep (si valeur > 10 alors je récupère ma ligne) ou dois je passer par awk ? (que je ne maitrise pas).

    Merci à vous.

  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,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep 'DP=[1-9][0-9][0-9]*'
    Devrait faire l'affaire

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Par défaut
    Salut zipe31,

    merci pour ta réponse ça fonctionne

    Pourrais tu m'expliquer rapidement comment ça fonctionne ? je n'arrive pas à adapter cette expression régulière, par exemple si je veux toutes les valeurs de DP > 4.


    EDIT : autant pour moi :

  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
    Citation Envoyé par RTK45 Voir le message
    Pourrais tu m'expliquer rapidement comment ça fonctionne ? je n'arrive pas à adapter cette expression régulière, par exemple si je veux toutes les valeurs de DP > 4.
    EDIT : autant pour moi :
    Euh... non, ça ne marchera pas

    La solution donnée ne peut marcher qu'avec ta 1ère clause, supérieur à 10.

    Effectivement, on recherche donc un nombre commençant par un chiffre compris entre 1 et 9, ([1-9], suivi par un chiffre compris entre 0 et 9 ([0-9]) lui même suivi d'aucun, un ou plusieurs chiffres ([0-9]*).

    Par contre ta solution [4-9][0-9]* elle recherchera un nombre commençant par un chiffre entre 4 et 9 suivi (ou pas) d'un autre chiffre compris entre 0 et 9.
    Donc 4, 5, 8, 40, 43, 55, 99, seront trouvés, mais pas 10, 15, 25, 32, 39, etc.

  5. #5
    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
    Citation Envoyé par zipe31 Voir le message
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep 'DP=[1-9][0-9][0-9]*'
    Devrait faire l'affaire
    Je dirais même plus (ou moins):

    devrait suffire

    [EDIT] J'aime bien le "lui même suivi d'aucun, un ou plusieurs chiffres ([0-9]*)"
    ça en fait des cas!!!
    [/EDIT]


    Citation Envoyé par RTK45 Voir le message
    Salut zipe31,

    merci pour ta réponse ça fonctionne
    Pourrais tu m'expliquer rapidement comment ça fonctionne ?
    ça veut juste dire que si on trouve un D suivi d'un P, suivi d'un =, suivi d'un chiffre non nul, suivi d'un chiffre éventuellement nul, c'est gagné!

    je n'arrive pas à adapter cette expression régulière, par exemple si je veux toutes les valeurs de DP > 4.

    EDIT : autant pour moi :
    Attention! Tu loupes tous les nombres supérieurs ou égaux à 10 commençant par 1 2 ou 3, c'est-à-dire (tu peux vérifier!): 10 à 39, mais aussi 100 à 399, 1000 à 3999, etc.

    Je dirais plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    egrep 'DP=([4-9]|[1-3][0-9])'

  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 jack-ft Voir le message
    Je dirais même plus (ou moins):

    devrait suffire
    Ben non
    Je cite notre ami :
    ça fonctionnne mais c'est assez... moche (et les valeurs peuvent monter très haut...).
    D'où le plus

    [EDIT] J'aime bien le "lui même suivi d'aucun, un ou plusieurs chiffres ([0-9]*)"
    ça en fait des cas!!!
    [/EDIT]
    Vi, ben des fois c'est pas facile d'exprimer ces satanés regex de #!?%@


    Je dirais plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    egrep 'DP=([4-9]|[1-3][0-9])'
    Bien vu

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Par défaut
    Oula oui en effet je n'avais pas vérifié mes résultats en détail je suis passé à coté de plein de valeurs

    C'est bien plus clair maintenant avec vos explications, merci à vous

  8. #8
    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
    Juste pour clarifier ce que j'ai dit plus haut, si tu veux la ligne complète, alors ces 2 commandes (sans option -o) retournent TOUJOURS exactement le même résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    egrep 'DP=[1-9][0-9][0-9]*'
    egrep 'DP=[1-9][0-9]'
    Je défie quiconque de trouver le moindre exemple qui mettrait en évidence une quelconque différence! (avec un prix d'un million de dollars? )

    Si tu veux isoler juste la valeur de DP, obtenue en utilisant l'option -o de grep, alors il faut absolument matcher la valeur complète:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    egrep -o 'DP=[1-9][0-9][0-9]*'

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 07/12/2006, 20h52
  2. GTK+ comparaison entier valeur du pointeur
    Par Emyleet dans le forum GTK+ avec C & C++
    Réponses: 10
    Dernier message: 21/07/2006, 15h28
  3. comparaison de valeur sur un résultat de requete
    Par griese dans le forum Langage
    Réponses: 5
    Dernier message: 28/06/2006, 15h23
  4. comparaison de valeurs
    Par Flobynaldo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/05/2006, 16h56
  5. Comparaison de valeurs stockees dans un meme champ
    Par Tartenpion dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/02/2006, 21h33

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