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

Bioinformatique Perl Discussion :

association de données de 2 fichiers


Sujet :

Bioinformatique Perl

  1. #1
    Futur Membre du Club
    Homme Profil pro
    doctorant
    Inscrit en
    septembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : doctorant

    Informations forums :
    Inscription : septembre 2016
    Messages : 5
    Points : 8
    Points
    8
    Par défaut association de données de 2 fichiers
    Bonjour à tous,

    Je souhaiterai associer le chiffre des lignes paires du fichier 2 aux données du fichier 1. La difficulté est que les numéros ne sont pas dans l'ordre, le/les
    derniers chiffres des lignes impaires du fichier 2 correpondent a/aux derniers chiffres des lignes paires du fichier 1.
    Idealement je souhaiterai avoir un fichier type csv avec une colonne nom, une colonne sequence et une colonne match

    Fichier 1
    >Sequenc0
    TGCCATTGTGATTGGGGGGGGGGGGGGGGG
    >Sequenc1
    gagcTGGCTTTTCTTGTGGGGTGAGGATGGACATTCTGCCATTGTGAT
    >Sequenc2
    TGGACATTCTGCCATTGTGAT
    >Sequenc3
    NgNNNGCTTTTTCTTGTGGGGTGAGGATGGACATTCTGCCATTGTGAT
    >Sequenc4
    GTGGGGTGAGGATGGACATTCTGCCATTGTGAT
    >Sequenc5
    CTTGTGGGTGAGGATGGACATTCTGCCATTGTGAT
    >Sequenc6
    GCGGTGTGTATTACTGTGCGAGAGAATTTCGCCCCCAGTATCAGCTGCTA
    >Sequenc7
    GGGATGGACATTCTGCCATTGTGAT
    >Sequenc8
    TGAGCTGGCTTTTCTTGTGGGTGAGGATGGACATTCTGCCATTGTGAT
    >Sequenc9
    CTGGACTTTTTCTTGTGGGGTGAGGATGGACATTCTGCCATTGTCGAT
    >Sequenc10
    TGGGTGGCTGGGTTTTGTGGGGTGAGGATGGACTTTCTGCCCATTGTGAT
    >Sequenc11
    TGGGTGGCTGGGTTTTGTGGGGTGAGGATGGACTTTCTGCCCATTGTGAT


    Fichier 2

    IonXpress_022_R_2016_09_01_14_18_35_dsde_Profit-166-ABC1234-DS-010916_Auto_user_Profit-166-ABC1234-DS-010916_166_prinseq_good_rf63.fastq.a60.bam.DS.txt.fasta0
    1
    IonXpress_022_R_2016_09_01_14_18_35_dsde_Profit-166-ABC1234-DS-010916_Auto_user_Profit-166-ABC1234-DS-010916_166_prinseq_good_rf63.fastq.a60.bam.DS.txt.fasta1
    6
    IonXpress_022_R_2016_09_01_14_18_35_dsde_Profit-166-ABC1234-DS-010916_Auto_user_Profit-166-ABC1234-DS-010916_166_prinseq_good_rf63.fastq.a60.bam.DS.txt.fasta10
    1
    IonXpress_022_R_2016_09_01_14_18_35_dsde_Profit-166-ABC1234-DS-010916_Auto_user_Profit-166-ABC1234-DS-010916_166_prinseq_good_rf63.fastq.a60.bam.DS.txt.fasta11
    1
    IonXpress_022_R_2016_09_01_14_18_35_dsde_Profit-166-ABC1234-DS-010916_Auto_user_Profit-166-ABC1234-DS-010916_166_prinseq_good_rf63.fastq.a60.bam.DS.txt.fasta2
    35
    IonXpress_022_R_2016_09_01_14_18_35_dsde_Profit-166-ABC1234-DS-010916_Auto_user_Profit-166-ABC1234-DS-010916_166_prinseq_good_rf63.fastq.a60.bam.DS.txt.fasta3
    5
    IonXpress_022_R_2016_09_01_14_18_35_dsde_Profit-166-ABC1234-DS-010916_Auto_user_Profit-166-ABC1234-DS-010916_166_prinseq_good_rf63.fastq.a60.bam.DS.txt.fasta4
    24
    IonXpress_022_R_2016_09_01_14_18_35_dsde_Profit-166-ABC1234-DS-010916_Auto_user_Profit-166-ABC1234-DS-010916_166_prinseq_good_rf63.fastq.a60.bam.DS.txt.fasta5
    1
    26
    IonXpress_022_R_2016_09_01_14_18_35_dsde_Profit-166-ABC1234-DS-010916_Auto_user_Profit-166-ABC1234-DS-010916_166_prinseq_good_rf63.fastq.a60.bam.DS.txt.fasta6
    54
    IonXpress_022_R_2016_09_01_14_18_35_dsde_Profit-166-ABC1234-DS-010916_Auto_user_Profit-166-ABC1234-DS-010916_166_prinseq_good_rf63.fastq.a60.bam.DS.txt.fasta7
    13
    IonXpress_022_R_2016_09_01_14_18_35_dsde_Profit-166-ABC1234-DS-010916_Auto_user_Profit-166-ABC1234-DS-010916_166_prinseq_good_rf63.fastq.a60.bam.DS.txt.fasta8
    5
    IonXpress_022_R_2016_09_01_14_18_35_dsde_Profit-166-ABC1234-DS-010916_Auto_user_Profit-166-ABC1234-DS-010916_166_prinseq_good_rf63.fastq.a60.bam.DS.txt.fasta9
    3





    le rendu pour cet exemple serait quelque chose comme :
    nom sequence match
    Sequenc0 TGCCATTGTGATTGGGGGGGGGGGGGGGGG 1
    Sequenc1 gagcTGGCTTTTCTTGTGGGGTGAGGATGGACATTCTGCCATTGTGAT 6
    Sequenc2 TGGACATTCTGCCATTGTGAT 35
    Sequenc3 NgNNNGCTTTTTCTTGTGGGGTGAGGATGGACATTCTGCCATTGTGAT 5
    Sequenc4 GTGGGGTGAGGATGGACATTCTGCCATTGTGAT 24
    et ainsi de suite

    Je pensais à un script perl qui recupérait la fin des lignes du fichiers 2 et les data et qui les confronterai au fichier 1.
    Mais j'ai du mal à voir comment mettre ca dans un script, ca n'est peut être pas la bonne démarche
    Merci beaucoup pour votre aide!

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    novembre 2010
    Messages
    2 984
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : novembre 2010
    Messages : 2 984
    Points : 8 267
    Points
    8 267
    Par défaut
    salut,

    Citation Envoyé par hermet Voir le message
    Je pensais à un script perl qui recupérait la fin des lignes du fichiers 2 et les data et qui les confronterai au fichier 1.
    ca me semble pas bête, je pense que ferai fait pareil
    on ouvre le fichier2, on récupère toutes les fins de lignes qui contiennent "fasta", et la valeur sur la ligne suivante, avec ça on crée un hash
    on ouvre ensuite le fichier1 et pour chaque ligne ">Sequenc" on fait correspondre le tout, idem en récupérant la ligne d'après et en utilisant les valeurs contenues dans le hash

    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
    use strict;
    use warnings;
     
    my %tab;
     
    open(my $fh, 'fichier2') or die "err fichier2";
    while (<$fh>) {
       if ($_ =~ /fasta(\d+)$/) {
          my $l = <$fh>;
          chomp $l;
          $tab{$1} = $l;
       }
    }
    close($fh);
     
    open($fh, 'fichier1') or die "err fichier1";
    while (<$fh>) {
       if ($_ =~ /^>Sequenc(\d+)/) {
          my $l = <$fh>;
          chomp $l;
          print "Sequenc" . $1 . " " . $l . " " . $tab{$1} . "\n";
       }
    }
    close($fh);
    mais il y a peut-être plus court/perl-esque ?

  3. #3
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 465
    Points
    12 465
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    je procéderais comme BufferBob (++): lecture préalable du fichier 2 et stockage dans un tableau ou un hachage de la matrice de correspondance entre le numéro de fasta et le numéro placé sur la ligne suivante.

    Puis lecture du fichier 1 et utilisation de la matrice de correspondance pour récupérer le numéro voulu afin d'écrire le fichier résultat.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    doctorant
    Inscrit en
    septembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : doctorant

    Informations forums :
    Inscription : septembre 2016
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    génial merci Bufferbob, ca marche super bien!

    pour appronfondir, quesqu'il pourrait y avoir de plus 'perlesque'?

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 465
    Points
    12 465
    Billets dans le blog
    1
    Par défaut
    Franchement, non, ou pas vraiment.

    Exemple de simplification possible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while (<$fh>) {
       if ($_ =~ /fasta(\d+)$/) {
          my $l = <$fh>;
          # ...
    pourrait être écrit plus brièvement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while (<$fh>) {
       if (/fasta(\d+)$/) {
          my $l = <$fh>;
          # ...
    Est-ce mieux? Bah, c'est discutable. C'est un peu plus concis, mais sans doute moins clair pour un débutant...

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

Discussions similaires

  1. Réponses: 22
    Dernier message: 25/02/2009, 09h11
  2. Problèmes table de données MySQL et fichiers associés!
    Par sofien dans le forum Administration
    Réponses: 6
    Dernier message: 04/12/2008, 08h37
  3. Réponses: 3
    Dernier message: 22/02/2004, 20h09
  4. Extraction de données sur des fichiers excel
    Par iupgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 13h53
  5. Temps d'accès à des données dans un fichier
    Par TONIAPEL dans le forum Assembleur
    Réponses: 5
    Dernier message: 28/09/2003, 15h21

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