Fusion de 2 tableaux avec Perl
Loulou
-
-
-
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
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:
- Fusion de 2 tableaux avec Perl
- Supercopier 2 - Télécharger - Gestion de fichiers
- Fusionner 2 tableaux excel - Guide
- Whatsapp avec 2 sim - Guide
- 2 ecran pc - Guide
- Comment fusionner 2 pdf - Guide
1 réponse
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 :
Dal
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