Fusion de 2 tableaux avec Perl

Fermé
Loulou - 20 janv. 2012 à 01:09
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 20 janv. 2012 à 16:52
Bonjour,

Je suis appelée à travailler avec de gros jeux de données... Je fais d'habitude toutes mes manipulations de données et analyses avec R, mais mes boucles n'en finissent plus sur mes tables...
Je me tourne donc vers la programmation perl pour essayer de régler mon problème, mais je suis complètement novice...

J'aimerais fusionner deux fichiers

fichier1 (reads)
nom1;sequence;etiquette
GX1;X23DF;SS1
GX2;X23DG;SS2
GX3;X23KG;SS1

fichier2 (contigs)
nom2;number;nom1
c1;1;GX15
c1;1;GX23
c2;2;GX10
(Il y a moins de lignes dans le fichier 2 que le fichier 1)


Je voudrais donc ajouter une "colonne" au fichier 2 contenant les valeurs de "etiquette" recherchées dans le fichier 1 (toutes les valeurs "étiquette" ne sont pas à reporter dans le fichier2, l'ordre est différent)
nom2;number;nom1;etiquette
c1;1;GX15;SS3
c1;1;GX23;SS5
c2;2;GX10;SS1

Auriez-vous une petite solution à mon petit problème?

Merci d'avance à tous


A voir également:

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 20/01/2012 à 16:54
Salut Loulou,

Tu peux faire cela en splittant les valeurs et en les stockant dans un hash.

Si je comprends bien ton problème, tu cherches les valeurs de "etiquette" dans fichier1 par rapport à l'entrée de la colonne nom1. Ton exemple de données est donc incomplet pour obtenir le résultat que tu donnes en exemple, car il n'y a pas GX10, ni GX15, ni GX23 dans la colonne nom1 de fichier1.

alors en supposant :

$ cat fichier1 
nom1;sequence;etiquette 
GX1;X23DF;SS1 
GX2;X23DG;SS2 
GX3;X23KG;SS1 
GX10;xxx;SS1 
GX15;xxx;SS3 
GX23;xxx;SS5 

$ cat fichier2 
nom2;number;nom1 
c1;1;GX15 
c1;1;GX23 
c2;2;GX10 

$ cat ajoutecolonne.pl 
#!/usr/bin/perl -w 

use strict; 

my %Etiquette; 
my @line_split; 

open(FICH,"fichier1") || die ("Erreur d'ouverture de fichier1"); 

while (<FICH>) 
{ 
  chomp; 
  @line_split = split(/;/); 
  if ($line_split[0] ne "nom1") 
  { 
    $Etiquette{$line_split[0]} = "$line_split[2]"; 
  } 
} 
close(FICH); 

open(FICH,"fichier2") || die ("Erreur d'ouverture de fichier2"); 
while (<FICH>) 
{ 
  chomp; 
  @line_split = split(/;/); 
  if ($line_split[0] ne "nom2") 
  { 
    print "$_;$Etiquette{$line_split[2]}\n"; 
  } 
} 

$ ./ajoutecolonne.pl 
c1;1;GX15;SS3 
c1;1;GX23;SS5 
c2;2;GX10;SS1

Dal
0