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

Programmation et administration système Perl Discussion :

extraire la différence entre deux larges fichiers


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Par défaut extraire la différence entre deux larges fichiers
    Bonjour,

    Je n'ai pas su où poster mon message alors j'ai posté ici.

    J'ai un fichier de référence F1 ~4millions de lignes et un fichier de base F2 ~500 000 lignes de la forme : champ1,champ2,champ3...

    Je voudrai extraire de F2 les lignes qui n'existent pas dans F1 et les mettre dans un autre fichier (n'existent pas ça veut dire que champ1 de F2 ne correspond à champ2 dans F1). Ceci implique que je dois, pour chaque ligne de F2, parcourir F1 et vérifier F2{champ1} == F1{champ2}

    Voici mon problème : le script bouffe énormément de ressource CPU, RAM et temps !!! et je voudrai avoir une autre solution plus optimisée que le parcours imbriqué de deux fichiers volumineux (ligne par ligne ou chargés dans deux hashs...c'est toujours galère) .
    Si quelqu'un aurait une autre idée elle est la bienvenue.

    Merci.

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Données volumineuses, besoin d'un index, recherche rapide d'une clé... Les bases de données sont faites pour ça ! Ton fichier de référence devrait être entré dans une BDD.

    --
    Jedaï

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Par défaut
    Bon, j'avoue que j'ai un petit peut omi quleques détails...

    mon fichier F1 en fait je l'exporte d'une table(clé, valeur) et je cherche 'valeur' dedans à partir de F2 pour voir si elle a une clé ou pas et extraire la liste des valeurs qui n'ont pas de clé...
    j'ai évité de charger F2 dans une table temporaire et faire une jointure SQL car ça me plante carrément le serveur...alors je me suis tourné vers les fichiers.

    PS : 'valeur' est une chaine de caractères et c'est de la follie d'indexer un champ varchar dans une table de cette taille !

  4. #4
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par gwissem Voir le message
    j'ai évité de charger F2 dans une table temporaire et faire une jointure SQL car ça me plante carrément le serveur...alors je me suis tourné vers les fichiers.
    Tu ne pourrais pas simplement découper F2 en petits bouts ? Ou au pire procéder ligne par ligne ?

    Sinon une solution pour améliorer les choses serait d'utiliser un Bloom filter pour diminuer le nombre de requêtes nécessaire (avec le module Bloom::Filter par exemple), ça marchera mieux si tu as une majorité d'éléments de F2 à supprimer par contre, si tu n'en as qu'un nombre très limité, ça n'aidera pas beaucoup (sauf s'il est acceptable de conserver quelques faux positifs).

    --
    Jedaï

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Par défaut
    Bloom filter m'aurait bien résolu mon problème s'il n'y avait pas ces faux positifs !

    Finalement je vais découper mon fichier de petits blocs, je voulais éviter cette solution car ça me fera n itérations * (n-1) blocs de trop...mais bon, entre un script qui ne marche et un script qui marche..mon choix est vite fait je laisserai le luxe d'optimiser à plus tard lool

    Merci pour ton aide en tout cas

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    pour imprimer les ligne commune de 2 fichier en uniligne :

    perl -ne 'print if ($seen{$_} .=@ARGV) =~ /10$/' fichier1 fichier2

    Merci a Randal Schwartz

    pour l'inverse remplacé le if par unless devrais marcher

  7. #7
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Par défaut
    trop génial cette commande ! ça me facilite la vie

    Merci infiniment à tout le monde, affaire résolue !

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

Discussions similaires

  1. extraire les différences entre deux fichiers xml en python
    Par princessita dans le forum Général Python
    Réponses: 4
    Dernier message: 17/02/2014, 00h09
  2. Réponses: 9
    Dernier message: 12/07/2011, 17h25
  3. [MySQL] Extraire la différence entre deux tables
    Par z_ahlam dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 27/10/2009, 15h55
  4. Outils sur les différences entre deux fichiers XML
    Par Community Management dans le forum XML/XSL et SOAP
    Réponses: 19
    Dernier message: 21/07/2008, 15h21
  5. Différence entre deux fichiers
    Par Celelibi dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2006, 17h36

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