Bonjour à tous,

J'ai écris un script perl, qui prend en entrée un fichier de cette forme :

ATGCGTAGC 12
GTCTAGCATGA 1
ATGCGTAGC 15
TGATGGGTAC 12

et qui me donne en fichier de sortie :

>dme_pi_1_9_27
ATGCGTAGC
>dme_pi_2_11_1
GTCTAGCATGA
>dme_pi_3_10_12
TGATGGGTAC

soit :
>dme_pi_nombrequelconque_nombredelettre_somme2écolonne

Voici le 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
#!/usr/bin/perl
use strict;
use warnings;
use Carp qw(confess);
use Getopt::Long;
use List::Util qw(sum);
 
# supprime les pi en double,et leur assigne un identifiant unique 
# format de sortie : .fasta
# command line : perl create_bank_pi.pl --file banque_embryon_02h.txt > .fasta
 
my $AF_class;
my %hash;
my $i=0;
 
GetOptions("file=s" => \$AF_class);
open(my $fh,'<',$AF_class) or die "$AF_class : $!\n\n";
while (<$fh>){
	if (/^[ATGC]/){
		chomp;
		my ($seq,$count) = split /\s+/,$_;
		my $length = length($seq);
		#$hash{$seq}++;
		push(@{$hash{$seq}->{'count'}},$count);
	}
 
 
}
 
foreach my $ID (keys(%hash)) {
	#print ("ID=$ID\tcount=\t".join("\t", @{$hash{$ID}->{'count'}})."\n");
	my $length = length($ID);
	my $somme = sum(@{$hash{$ID}->{'count'}});
	print ">dme_pi_".$i."_".$length."_".$somme."\n".$ID."\n";
	$i++;
 
 
}
 
close($fh);
Seulement, il est très très long à me donner une sortie, je voudrais donc savoir comment "otpimiser mon script , de façon à ce que quand je lui fourni un fichier d'entrée avec beaucoup de ligne, il ne soit pas aussi long à me retourner un résultat ...
Merci d'avance.