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 :

Comparer le contenu de 2 fichiers et récupérer le résultat


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Par défaut Comparer le contenu de 2 fichiers et récupérer le résultat
    Bonjour,

    J'ai 2 fichiers texte "pilotes" et "machines" contenant chacun des noms de serveurs (un seul nom par ligne) dont voici respectivement le contenu :

    Fichier "pilotes" :

    assid01
    albidy2
    maiss4ips
    saytyl2
    massy54
    ......., etc.

    Fichier "machines" :

    qunr01n
    bitric7
    assid01
    lasmer9
    albidy2
    zebrai23
    albin30
    maiss4ips
    ertibis08
    saytyl2
    massy54
    .........,etc.

    Le fichier "pilotes" est censé être un sous ensemble de du fichier "machines",... mais on a des surprises !
    Globalement il s'agit de comparer ligne par ligne le contenu du fichier "pilotes" avec celui du fichier "machines", autrement dit trouver tous les noms qui se trouvent à la fois dans chacun des 2 fichiers.

    Mes questions :
    1- comment puis-je vérifier qu'il y a pour chaque nom dans "pilotes" le même nom dans "machines"?
    2- Puis, si c'est vrai écrire chaque nom trouvé dans un fichier "résultats", et si pour un nom lambda dans "pilotes" on ne trouve pas le même nom dans "machines", on écrit alors une phrase : " le nom : $nom du fichier "pilotes" n'existe pas dans le fichier "machines".

    D'avance merci de votre aide

  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,

    Ça ne fait exactement ce que tu veux dans la mesure où ça crée 2 fichiers (bon et mauvais), mais ça fait quand même ce que tu demandes :

    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
    $ cat pilotes 
    assid01
    albidy2
    maiss4ips
    saytyl2
    massy54
    .........,etc.
    tttrreee
     
    $ cat machines 
    qunr01n
    bitric7
    assid01
    lasmer9
    albidy2
    zebrai23
    albin30
    maiss4ips
    ertibis08
    saytyl2
    massy54
    .........,etc.
     
    $ fgrep -f pilotes machines > bon
     
    $ fgrep -vf machines pilotes > mauvais
     
    $ cat bon 
    assid01
    albidy2
    maiss4ips
    saytyl2
    massy54
    .........,etc.
     
    $ cat mauvais 
    tttrreee
     
    $

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Par défaut
    Grand Merci. Ca me donne exactement ce que je voulais !
    Mais est ce que je peux avoir tous les résultats dans un seul fichier, de telle sorte que le résultat de votre exeple s'affiche comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ cat monfichier
    assid01
    albidy2
    maiss4ips
    saytyl2
    massy54
    le nom :  tttrreee du fichier "pilotes" n'existe pas dans le fichier "machines"

  4. #4
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Essaye ça (j'ai pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fgrep -f pilotes machines > resultat
    fgrep -vf machines pilotes | sed -re 's/^(.*)$/$1 du fichier "pilotes" n\'existe pas dans le fichier "machines"/' >> resultat

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

    Citation Envoyé par Loceka Voir le message
    Essaye ça (j'ai pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fgrep -f pilotes machines > resultat
    fgrep -vf machines pilotes | sed -re 's/^(.*)$/$1 du fichier "pilotes" n\'existe pas dans le fichier "machines"/' >> resultat
    La sous-expression n'est pas nécessaire à partir du moment où c'est la ligne entière qui nous intéresse. De plus la référence à une sous expression c'est "\1" et non pas "$1"

    Il y a aussi l'apostrophe qui pose problème, même en l'échappant je n'arrive pas à la faire accepter, seule solution sortir de sed, la protéger avec des quotes doubles et revenir dans sed :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgrep -vf machines pilotes | sed  's/.*/le nom : "&" du fichier "pilotes" n'"'"'existe pas dans le fichier "machines"/' >> resultat

  6. #6
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Par défaut
    Je viens de rencontrer un problème :

    Est-ce que le fichier "bon" doit contenir le même nombre de ligne (ou de noms) que dans le fichier "pilotes" ? Dans mon cas, l'équivalent du fichier "bon" contient moins de ligne que "pilotes". D'où cela pourrait-il venir à votre avis ? Rechercher dans l'un ou l'autre des fichier est fastidieux, car ce sont des fichiers trop gros...

  7. #7
    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 bras39 Voir le message
    Est-ce que le fichier "bon" doit contenir le même nombre de ligne (ou de noms) que dans le fichier "pilotes" ?
    Ben pas forcément, c'est justement le but de ta demande initiale
    Je te cite :Le fichier "pilotes" est censé être un sous ensemble de du fichier "machines",... mais on a des surprises !

    Dans mon cas, l'équivalent du fichier "bon" contient moins de ligne que "pilotes". D'où cela pourrait-il venir à votre avis ?
    Normalement tu devrais retrouver les fichiers manquants dans le fichier "mauvais"

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/08/2011, 08h26
  2. Comparer le contenu de 2 fichiers txt
    Par romain_t dans le forum C
    Réponses: 5
    Dernier message: 22/10/2010, 13h35
  3. Comparer le contenu de deux fichiers
    Par Sancti_Eyes dans le forum Langage
    Réponses: 7
    Dernier message: 03/05/2009, 10h54
  4. comparer le contenu de 2 fichiers
    Par vins25 dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 20/03/2006, 07h04
  5. Comment comparer le contenu de 2 fichiers ?
    Par steph_1 dans le forum Langage
    Réponses: 4
    Dernier message: 17/06/2005, 18h38

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