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

Linux Discussion :

Supprimer redondance fichier


Sujet :

Linux

  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 Supprimer redondance fichier
    Bonjour à tous,

    J'ai un problème avec la manipulation d'un fichier.
    Il se présente sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >pi1
    ATGCGTGAAATGCAT
    >pi2
    TGCCCTGATAGGGACCAGTAGAC
    >pi3
    ATGCGTGAAATGCATA
    >pi4
    TGCATGACTA
    >pi5
    ATGCGTGAAATGCATAT
    J'ai mis en gras les séquences ayant la même suite de lettre, et je souhaite garder seulement la plus longue séquence, donc mon nouveau fichier :
    >pi5
    ATGCGTGAAATGCATAT
    >pi2
    TGCCCTGATAGGGACCAGTAGAC
    >pi4
    TGCATGACTA

    Je n'ai aucune idée de comment faire ce genre de chose, quelqu'un pourrait m'aider ?
    Merci d'avance.

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    pourquoi faire ça a la main ?? y'a pas des logiciels de génétique ???

  3. #3
    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
    s'il en existe je ne les connais pas ....

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 450
    Points
    19 450
    Par défaut
    Bonjour.

    s'il en existe je ne les connais pas ....
    Oh si il en existe, il faut simplement chercher. Par exemple je me souviens que pour ce genre de traitement (faire un diff entre deux séquences de nucléotides), on avait le logiciel gratuit Anagène au lycée qui était pas mal fait ... après il en existe peut être d'autres qui sont encore mieux, à chercher .

    Bref, sinon oui, tu peux faire ça en shell si tu souhaites (voir, sed, awk, etc) où bien dans d'autres langages plus évolués et peut être plus adaptés.

    Cordialement,
    Idriss

  5. #5
    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
    Bonjour,
    Je réouvre ce poste car j'avais reussi à faire ce que je demandai grâce à ce script :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #!/usr/bin/perl
     
    use strict;
    use warnings;
    use Carp qw(confess);
    use Getopt::Long;
    use Bio::SeqIO;
     
    my %seq;
    my $title;
    my ($fasta_file,$output_file);
    GetOptions("fasta=s" => \$fasta_file,"out=s" => \$output_file );
    my $in = Bio::SeqIO->new( -file => $fasta_file, '-format' => 'Fasta' );
    open(my $out,'>',$output_file) or die "$output_file : $!\n\n";
     
     
    while ( my $seqs = $in->next_seq()){
    	my $title = $seqs->id() ;
    	my $sequence = $seqs->seq ;
    	$seq{$sequence}=$title;
    }
     
     
     
    my @seq = keys (%seq); 
    my @uniqueseq;
    my $find=0;
    foreach (@seq){ 
    	$find=0;
    	my $seq=uc($_); 
    	foreach (@uniqueseq){
    		if ($seq=~/$_/){
    			$_=$seq; 
    			$find=1;
    		}
    		if ($_=~/$seq/){
    			$find=1;
    		}
    	}
    	if ($find==0){
    		push @uniqueseq,$seq;
    	}
    }
     
    foreach (@uniqueseq){
    	print {$out} ">$seq{$_}\n$_\n";
    }
    Or, j'ai un fichier avec des millions de sequences, et cela fait 7h que le script tourne ... je pense que cela vient du fait que je parcours à chaque iteration la liste "@uniqueseq" .... quelqu'un aurait une idée pour faire autrement ?
    Merci d'avance pour votre aide !

  6. #6
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    Citation Envoyé par Isabella83 Voir le message
    Bonjour,
    Je réouvre ce poste car j'avais reussi à faire ce que je demandai grâce à ce script :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #!/usr/bin/perl
     
    use strict;
    use warnings;
    use Carp qw(confess);
    use Getopt::Long;
    use Bio::SeqIO;
     
    my %seq;
    my $title;
    my ($fasta_file,$output_file);
    GetOptions("fasta=s" => \$fasta_file,"out=s" => \$output_file );
    my $in = Bio::SeqIO->new( -file => $fasta_file, '-format' => 'Fasta' );
    open(my $out,'>',$output_file) or die "$output_file : $!\n\n";
     
     
    while ( my $seqs = $in->next_seq()){
    	my $title = $seqs->id() ;
    	my $sequence = $seqs->seq ;
    	$seq{$sequence}=$title;
    }
     
     
     
    my @seq = keys (%seq); 
    my @uniqueseq;
    my $find=0;
    foreach (@seq){ 
    	$find=0;
    	my $seq=uc($_); 
    	foreach (@uniqueseq){
    		if ($seq=~/$_/){
    			$_=$seq; 
    			$find=1;
    		}
    		if ($_=~/$seq/){
    			$find=1;
    		}
    	}
    	if ($find==0){
    		push @uniqueseq,$seq;
    	}
    }
     
    foreach (@uniqueseq){
    	print {$out} ">$seq{$_}\n$_\n";
    }
    Or, j'ai un fichier avec des millions de sequences, et cela fait 7h que le script tourne ... je pense que cela vient du fait que je parcours à chaque iteration la liste "@uniqueseq" .... quelqu'un aurait une idée pour faire autrement ?
    Merci d'avance pour votre aide !
    je connais pratiquement pas perl mais à priori la structure semble ok, je pense donc que c'est le fait effectivement de tout rebalayer qui pose probleme en perfs.

  7. #7
    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
    ok et y a t'il un moyen plus rapide de faire la même chose à ton avis ?

Discussions similaires

  1. probleme supprimer redondance dans un fichier
    Par Isabella83 dans le forum C
    Réponses: 5
    Dernier message: 06/02/2013, 11h07
  2. [VB.NET] Comment supprimer un fichier qui est utilisé ?
    Par Toon94 dans le forum Windows Forms
    Réponses: 12
    Dernier message: 13/06/2010, 12h59
  3. supprimer redondance dans un fichier
    Par scofild20 dans le forum C++
    Réponses: 43
    Dernier message: 06/12/2007, 04h35
  4. [cvs] supprimer un fichier
    Par ed_hunter dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 27/03/2007, 18h17
  5. Supprimer un fichier par rapport a une date
    Par NewB dans le forum Linux
    Réponses: 2
    Dernier message: 25/06/2003, 13h44

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