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 :

Bug de grep ?


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Bug de grep ?
    Bonjour à toutes et à tous

    Je rencontre un petit problème grep. J'ai deux listes de références contenues chacune dans une variable : MNList et ToKeep.

    Voici une partie de MNList
    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
    #80
    #81
    #8
    #82
    #83
    #84
    #85
    #86
    #87
    #88
    #89
    #90
    #91
    #9
    #92
    Et voici une partie de ToKeep :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #5
    #58
    #61
    #64
    #65
    #71
    #83
    #85
    #86
    #88
    #91
    En gros, je veux comparer MNList à ToKeep et générer un fichier qui contient l'information "DEL" pour chaque référence #x de MNList qui ne sera pas retrouvée dans ToKeep.

    Lorsque je boucle sur MNList :
    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
    imax=`echo $MNList | awk '{print NF;}'`
     
    for i in `seq 1 $imax`;
    do
      MN=`echo $MNList | cut -d " " -f $i`
    echo "MN = '$MN'"
    echo "grep : "
    echo $ToKeep | grep -o "$MN"
      if [ -z "`echo $ToKeep | grep -o "$MN"`" ] ; then
    	del="DEL"
    echo "FLAG DEL"
      else
    	del=""
    echo "FLAG ELSE"
      fi
     
      LH=`echo $list | grep -o "@$MN@" | wc -l`
      echo "$MN $LH $del" >> $txtFile
    done
    j'obtiens le problème suivant :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    MN = '#8'
    grep :
    #8
    #8
    #8
    #8
    FLAG ELSE
    MN = '#82'
    grep :
    FLAG DEL
    MN = '#83'
    grep :
    #83
    FLAG ELSE
    MN = '#84'
    grep :
    FLAG DEL
    MN = '#85'
    grep :
    #85
    FLAG ELSE
    MN = '#86'
    grep :
    #86
    FLAG ELSE
    MN = '#87'
    grep :
    FLAG DEL
    MN = '#88'
    grep :
    #88
    FLAG ELSE
    MN = '#89'
    grep :
    FLAG DEL
    MN = '#90'
    grep :
    FLAG DEL
    MN = '#91'
    grep :
    #91
    FLAG ELSE
    MN = '#9'
    grep :
    #9
    FLAG ELSE
    Pourquoi grep renvoi plusieurs fois #8 ? #8 est absent de ToKeep il ne devrait rien renvoyer, de même #9 est renvoyé alors qu'il n'est pas présent dans ToKeep (et cette fois-ci grep ne renvoi qu'une seule occurrence du motif recherché). #83 par exemple est bien reconnu et le bon flag lui est attribué... C'est à n'y rien comprendre ^^"

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

    Comment dire, MN=#8 et ce motif est bien présent dans les différents #80,#81,#82...

    Donc grep a encore raison

    Un détail: cela me parait bien lourd ton script, j'ai l'impression que selon ton besoin, cela doit tenir en 2 ou 3 lignes et sans des trucs comme cut, grep,...
    Cordialement.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Merci pour la réponse !

    Décidément, je n'arrive pas à m'y faire à grep xD

    Et pourquoi #9 n'est renvoyé qu'une fois ?

    Pour le côté lourd du script, c'est bien possible, je n'ai que très peu de connaissances en shell...

    De manière général, comment rechercher un motif sans avoir ce soucis ?

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    remplace tes -o par --color=always ça va devenir limpide

  5. #5
    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 842
    Points
    7 842
    Par défaut
    Citation Envoyé par TheMoustic Voir le message
    Et pourquoi #9 n'est renvoyé qu'une fois ?
    Parce qu'il n'apparaît qu'une fois.
    Le mieux serait que tu expliques mieux ce que tu souhaites faire, ton script est difficile à lire à cause de l'indentation et sa logique semble tirée par les cheveux...

    De manière générale, comment rechercher un motif sans avoir ce soucis ?
    En définissant ce que tu cherches vraiment, et ça ne semble pas être un motif.

    Si tu cherches des lignes contenant exactement une chaine de caractères et rien d'autre, fait un:

    Si tu cherches des "mots":

    ou plus simplement
    ɹǝsn *sıɹɐlos*

  6. #6
    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

    En gros, je veux comparer MNList à ToKeep et générer un fichier qui contient l'information "DEL" pour chaque référence #x de MNList qui ne sera pas retrouvée dans ToKeep.

    Pour t'ouvrir des horizons:

    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
    $ awk '(FNR==NR){a[$0]++;next;} (a[$0]==0){$2="DEL";} 1' ToKeep MNList
    #80 DEL
    #81 DEL
    #8 DEL
    #82 DEL
    #83
    #84 DEL
    #85
    #86
    #87 DEL
    #88
    #89 DEL
    #90 DEL
    #91
    #9 DEL
    #92 DEL
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

Discussions similaires

  1. Bug new build ??
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 31/01/2003, 10h30

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