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 pour un seul nombre


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 82
    Points : 44
    Points
    44
    Par défaut Grep pour un seul nombre
    Bonjour,

    Ma question est toute simple, j'arrive même pas à comprendre comment je passe à côté alors que j'ai lu (grossièrement j'avoue) et regarder pas mal de tuto sur grep.

    Je suis sur que je le savais avant mais ça n'arrive pas à revenir ...

    Bref !

    J'ai un fichier assez grand (300 Mo de lignes ...)

    Je n'aimerais prendre que les lignes (avec le numéro de ligne et la ligne du dessus) contenant le pattern 31 mais rien d'autre.

    J'ai beaucoup de 310,311 etc ...

    Donc si je fais que grep -n1 31 Dky.check on me sort beaucoup plus de ligne que prévu ...

    Merci d'avance !

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bonjour,
    le pattern est '[^0-9]31[^0-9]'
    Cordialement.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 82
    Points : 44
    Points
    44
    Par défaut
    Ok parfait merci beaucoup !

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    En fait, le pattern est incomplet, il ne tient pas compte des cas où le 31 est en début ou fin de ligne...

    il y a peut-être plus simple, mais le pattern suivant est plus juste: '[^0-9]31[^0-9]\|^31[^0-9]\|[^0-9]31$\|^31$'
    Cordialement.

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

    grep -n -B1 '\b31\b' fich devrait le faire aussi, non ?
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    C'est selon comment on comprend le besoin de départ...
    car pour quelque chose du genre 31A ça ne fonctionne pas.
    Cordialement.

  7. #7
    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 disedorgue Voir le message
    C'est selon comment on comprend le besoin de départ...
    car pour quelque chose du genre 31A ça ne fonctionne pas.
    Ben comme toujours, c'est la faute au posteur et à son avarice concernant l'apport d'info
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  8. #8
    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 458
    Points
    13 458
    Par défaut
    Bonjour

    car pour quelque chose du genre 31A ça ne fonctionne pas.
    Je ne vois pas la différence entre "310" et "31A" qui doivent être exclus de la même façon.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    C'est ton interprêtation, le pattern 310 est bien exclue mais est-ce qu'un pattern 31A ou 31Z sont des patterns valides ?
    Et encore, même le fait que c'est la ligne 31 qu'il cherche prête à interprêtation (si ça se trouve, il cherche toutes les lignes où il y a le nombre 31 et comme on ne connait pas le format de son fichier...)
    Cordialement.

  10. #10
    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 458
    Points
    13 458
    Par défaut
    contenant le pattern 31 mais rien d'autre
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  11. #11
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Si on prends la description du besoin au pied de la lettre, la bonne réponse est:

    Rien d'autre, c'est rien d'autre...

    Edit: et pour répondre à cette partie: "avec le numéro de ligne et la ligne du dessus"

    ɹǝsn *sıɹɐlos*

  12. #12
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Pour le coup, c'est jlliagre qui a raison ...

    De toute façon, toutes les autres solutions proposées ont un défaut (les miennes comprises): elles acceptent par exemple 31.25 ou 31,25...
    Cordialement.

  13. #13
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    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 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Gagzkul Voir le message
    Je n'aimerais prendre que les lignes (avec le numéro de ligne et la ligne du dessus) contenant le pattern 31 mais rien d'autre.

    J'ai beaucoup de 310,311 etc ...

    Donc si je fais que grep -n1 31 Dky.check on me sort beaucoup plus de ligne que prévu ...
    Bref, pour résumer les interrogations (bien légitimes):

    Qu'est-ce que tu appelles "contenant le pattern 31 mais rien d'autre" ?

    Veux-tu seulement les lignes contenant uniquement les 2 caractères "31" et aucun caractère ni avant ni après sur la ligne?
    Veux-tu éviter tous les "31" directement précédés ou suivis d'un chiffre (qui représentent un autre nombre que le nombre 31)?
    Veux-tu éviter une ligne contenant "31.5"?
    Veux-tu éviter une ligne contenant "31A"?
    Veux-tu accepter une ligne contenant "031" (qui peut être vu comme représentant le nombre 31)?

    Peux-tu donner une liste d'exemples "contenant le pattern 31 mais rien d'autre" et une liste de contre-exemples "ne contenant pas le pattern 31 mais rien d'autre" ?

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 82
    Points : 44
    Points
    44
    Par défaut
    Il me semblait pourtant avoir repondu,

    Et bien ce que je voulais dire est que le pattern est 31,

    Tout autre terme style 31A ; 310 ; 31, ; 31. ; 31* ; 31@ ; 13 ; 031 ; 3131, JE NE LES VEUX PAS (j'ai mis en majuscule pour que l'on voit la fin de ma phrase)

    Bref je ne souhaite rechercher seulement le pattern 31 et rien d'autre (que ce soit avant ou apres).
    Mes nombres etaient tous entier j'aurais du le preciser, je n'ai pas voulu etre avare en information c'etait juste que pour moi 31 et rien d'autre c'etait assez clair et concis ...

    Merci pour toute les reponses !

  15. #15
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bah, j'ai toujours pas compris, mais c'est peut-être parce que je n'arrive pas à voir d’intérêt de rechercher une ligne qui contient uniquement 31.

    Et si tu nous expliquais la finalité de cette recherche (en faisant des phrases complètes) ?
    Cordialement.

  16. #16
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par Gagzkul Voir le message
    Il me semblait pourtant avoir repondu,

    Et bien ce que je voulais dire est que le pattern est 31
    non !

    Tout autre terme style 31A ; 310 ; 31, ; 31. ; 31* ; 31@ ; 13 ; 031 ; 3131
    Les phrases pas terminées, ça n'aide pas ...

    Bref je ne souhaite rechercher seulement le pattern 31 et rien d'autre (que ce soit avant ou apres).
    Ok, mais plutôt que parler de pattern, tu aurais mieux fait de dire dès le début que les lignes doivent contenir 31 et rien d'autre. Ton pattern, ce n'est pas 31 mais comme déjà indiqué dans ma réponse ^31$
    ɹǝsn *sıɹɐlos*

  17. #17
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 82
    Points : 44
    Points
    44
    Par défaut
    Euh , nah j'ai du supprimer la fin de ma phrase sans m'en rendre compte ....
    Bref, exactement j'avais une liste de nombre :

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    120 54567 21567 1 234 
    12 2 31 78  4 6
    123 87 8 213 
    3 84  321 310
    31 15 78  3 1
    Par exemple ... Sauf que c'etait un fichier qui faisait un nombre de ligne affolant (plusieurs millions) et qui faisait plusieurs Go (oui precedemment c'etait 300 Mo mais cela s'etait agrandit plus tard ..) alors que ce n'etait qu'un fichier remplit de nombre.

    Et je souhaitais trouver les lignes ou il n'y avait que le nombre 31. Donc je me suis mal exprime (encore une fois vraiment desole ....) mais je ne cherchais que le nombre 31 avec la ligne correspondante mais ce que je voulais dire rien avant et rien apres cela voulait dire pas de X31Y juste 31 (je ne sais pas trop si je me suis fait comprendre ...)

    Lorsque je voulais faire le grep -n1 31, j'obtenais un nombre un peu moins impressionnant de lignes (500 Mo) mais encore trop impressionnant pour pouvoir trouver ce nombre 31.
    Mais bien sur j'obtenais plein de nombre du style 310 etc etc ....

    Car c'etait une particule qui possedait une identification de 31 qui apparaissait dans ma desintegration alors qu'elle n'existait pas dans ma base de donnee et cela faisait plante tout le programme.
    Finalement l'erreur etait du a une mauvaise version et j'ai pu corriger tout cela autrement mais j'avoue que ca m'avait fait perdre un peu de temps ..

    J'espere que j'ai ete un peu plus clair, j'essaye pourtant de m'ameliorer a chaque message mais je suis pas vraiment doue pour ca on dirait ... (puis le clavier qwerty ne doit pas aider ..)

    Donc pour repondre au questions precedentes :

    Veux-tu seulement les lignes contenant uniquement les 2 caractères "31" et aucun caractère ni avant ni après sur la ligne? NON
    Veux-tu éviter tous les "31" directement précédés ou suivis d'un chiffre (qui représentent un autre nombre que le nombre 31)? OUI
    Veux-tu éviter une ligne contenant "31.5"? OUI
    Veux-tu éviter une ligne contenant "31A"? OUI
    Veux-tu accepter une ligne contenant "031" (qui peut être vu comme représentant le nombre 31)? NON mais de toute facon je n'en avais pas dans mon fichier

  18. #18
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Donc, le pattern du grep semblerait être: '^31$\|^31\s\+\|\s\+31$\|\s\+31\s\+'
    Cordialement.

  19. #19
    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 458
    Points
    13 458
    Par défaut
    Lorsque je voulais faire le grep -n1 31, j'obtenais un nombre un peu moins impressionnant de lignes (500 Mo) mais encore trop impressionnant pour pouvoir trouver ce nombre 31.
    Oui. grep prend en entrée une expression rationnelle/régulière (= regular expression = regex).

    ET NON UN MOT !

    Voilà pourquoi le résultat de 500Mo
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Citation Envoyé par disedorgue
    Donc, le pattern du grep semblerait être: '^31$\|^31\s\+\|\s\+31$\|\s\+31\s\+'
    ou '\<31\>', simplement, non ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. fonction pour compter le nombre de checkbox coché ?
    Par Death83 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 15/09/2005, 11h28
  2. [C#] Plusieurs LinkButton pour une seule fonction
    Par FunnyDjo dans le forum ASP.NET
    Réponses: 3
    Dernier message: 08/06/2005, 22h01
  3. Grep pour filtrer le fichier log
    Par devdev2003 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 23/02/2005, 05h48
  4. Algorithme pour trier trois nombres
    Par legosam dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 17/01/2005, 21h47
  5. Réponses: 13
    Dernier message: 20/07/2004, 08h54

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