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 :

Comparaison de 2 fichiers


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur de Production
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de Production

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Comparaison de 2 fichiers
    Bonjour à tous,

    Environnement LINUX

    J'ai un gros fichier texte avec des ";" comme séparateur qui se nomme FICA.txt

    Question :
    Si le 1 er champ de FICA.txt est absent de mon fichier FICB.txt alors je dois écrire la ligne entière de FICA.txt dans un fichier RESULT.txt.

    exemple de contenu de FICA.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    12345;ma ligne de code 
    12356;il fait chaud
    46789;demain je travaille
    ....

    exemple de contenu de FICB.txt
    ...

    Exemple de contenu de RESULT.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    12356;il fait chaud
    46789;demain je travaille
    ...


    J'ai bien fait une boucle avec while read LINE de mon fichier FICA.txt suivi d'un grep pour vérifier la présence dans FICB.txt mais ma boucle prend enormément de temps.

    Quelqu'un peut il me donner une solution simple avec des explications ?

    Il me semblerait qu'une commande avec awk soit plus rapide ?

    Merci d'avance pour vos réponses

    Philippe

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    Bonjour,

    join est ton ami.
    cf. man join, et info '(coreutils) join invocation'
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Voici une solution en awk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F\; 'FNR == NR {A[$1]=1;next};!A[$1]' ficb.txt fica.txt
    Pour les explications, voir le post sed-extraire-lignes-d-fichier-fonction-position (le "!" représente juste la négation de la condition).
    Cordialement.

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

    Une solution grep:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ grep -vf FICB.txt FICA.txt 
    12356;il fait chaud
    46789;demain je travaille
    Ou un peu plus robuste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/^/^/;s/$/\;/;' FICB.txt |grep -vf - FICA.txt
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    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 Flodelarab Voir le message
    Bonjour

    Une solution grep:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ grep -vf FICB.txt FICA.txt 
    12356;il fait chaud
    46789;demain je travaille
    Tu aurais pu préciser en quoi la solution "grep" est moins robuste!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ cat FICA.txt
    12345;ma ligne de code 
    12356;il fait chaud
    46789;demain je travaille
    345678;une partie de la cle est contenue dans FICB
    666999;une partie de la valeur 0567770 est contenue dans FICB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat FICB.txt
    45678
    12345
    56777
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ grep -vf FICB.txt FICA.txt
    12356;il fait chaud
    46789;demain je travaille

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 721
    Points
    12 721
    Par défaut
    La proposition qui passe uniquement par grep, ne répond pas exactement au besoin qui est de vérifier uniquement le premier champs.
    Il faut donc retravailler le fichier FICB.txt, pour lui rajouter des délimiteurs que nous pourrions noter ici comme des délimiteurs de position.
    Cordialement.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur de Production
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de Production

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Remerciements
    Merci à la communauté informatique pour vos réponses

Discussions similaires

  1. Comparaison de deux fichiers EXCEL
    Par meufeu dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/10/2006, 22h56
  2. comparaison de deux fichiers textes
    Par chmaichel dans le forum Delphi
    Réponses: 1
    Dernier message: 28/07/2006, 11h35
  3. [VBA-E]comparaison de 2 fichiers Excel
    Par frederic.go dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/03/2006, 14h22
  4. [langage] Comparaison de deux fichiers
    Par perlgirl dans le forum Langage
    Réponses: 4
    Dernier message: 04/05/2005, 16h05
  5. [Info]comparaison de 2 fichiers
    Par menuge dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 19/04/2005, 16h44

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