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

Langage Perl Discussion :

jointure de fichier sur plusieurs colonnes


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Points : 81
    Points
    81
    Par défaut jointure de fichier sur plusieurs colonnes
    Bonjour,

    J'ai 2 fichiers (exemples ci dessous):

    a.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    chr start stop expID sens count
    chr1	5122	5123	exp_1 + 3
    chr2	5153	5154	exp_1 + 2
    chr3	5194	5195	exp_1 + 8

    b.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    chr start stop expID sens count
    chr1	15730457	15730458	exp_2 - 15
    chr2	5194	5195	exp_2 + 21
    Je voudrais joindre mes deux fichiers en fonction des colonnes "chr","start", "stop","sens" de façon à avoir un fichier final avec
    "chr","start", "stop","sens", "count_fichier_a.txt", "count_fichier_b.txt"

    Soit avec l'exemple ci dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    chr start stop expID sens count_exp1 count_exp2
    chr1	5122	5123	exp_1 + 3 0
    chr2	5153	5154	exp_1 + 2 0
    chr3	5194	5195	exp_1 + 8 21
    chr1	15730457	15730458	exp_2 - 0 15
    Merci pour votre aide car je ne m'en sors pas !

  2. #2
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Points : 81
    Points
    81
    Par défaut
    J'ai finalement fait comme ceci mais il y a peut être plus simple ...

    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
     
    while(<$file1>){
    	chomp;
    	my($chr,$start,$stop,$sens,$count)=split /\t/;
    	my $value_cx = join(';',$chr,$start,$stop,$sens);
    	$hash{$value_cx}->{'count'}=$count;
    	$final{$value_cx}++;
     
    }
     
    while(<$file2>){
    	chomp;
    	my($chr,$start,$stop,$sens,$count)=split /\t/;
    	my $value_cx = join(';',$chr,$start,$stop,$sens);
    	$dico{$value_cx}->{'count'}=$count;
    	$final{$value_cx}++;
    }
     
    foreach my $val (keys %final){
    	my($chr,$start,$stop,$sens) = split /;/, $val;	
    	if(defined($hash{$val}->{'count'}) && defined($dico{$val}->{'count'})){
    		print "$chr\t$start\t$stop\t$sens\t$hash{$val}->{'count'}\t$dico{$val}->{'count'}\n";
    	}
     
     
    }

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Ça me semble bien, et difficile de voir un algorithme plus efficace. Éventuellement, tu pourrais ne lire que le premier fichier en mémoire (hash) et traiter la jointure lors de la lecture au fil de l'eau du 2e.
    Ainsi, tu garderais au moins l'ordre de rangement d'un des deux fichiers.

    Par contre attention, dans ton exemple du 2e fichier, il y a 2 colonne count (ici, tu ne prends en compte que la première des deux).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/10/2008, 13h29
  2. Jointure avec conditions sur plusieurs colonnes
    Par ben53 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 28/11/2005, 09h27
  3. Lister sur plusieurs colonnes dans état
    Par armagued dans le forum Access
    Réponses: 3
    Dernier message: 30/10/2005, 21h21
  4. [XSLT] - Trier un fichier sur plusieurs critères
    Par ytse dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/10/2005, 16h26
  5. Query sur plusieurs colonnes avec count(distinct...)
    Par Jeankiki dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/08/2004, 15h22

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