SkÃ¥ne Sjælland Linux User Group - http://www.sslug.dk Förstasida   Anmälning   Postarkiv   Forum   Kalender   Sök
MhonArc Dato: [Date Prev] [Kronologisk oversigt] [Date Next]   TrÃ¥d: [Date Prev] [Oversigt trÃ¥de] [Date Next]   MhonArc
 

Re: [PERL] Optimering



Det er lidt vel sent at besvare et brev fra August men...

Perl er alletiders til mange ting men af og til er det bare bedre at
bruge awk. En linie:

awk '{print $0 >>"outputfile"$1}' inputfile

Dit perlprogram er godt nok snirklet skal jeg love for. Famsize? og pos?
....er der noget jeg har overset?
 

Ariel, Uni-c
E-mail: sslug@sslug



On Thu, 10 Aug 100, Claus Ekstroem BSA wrote:

> Hejsa!
> 
> Jeg har et optimeringsspoergsmaal til perl.
> 
> Problem: Jeg har en stor fil (ca. 10 MB) fyldt af data af denne form:
> 0 xx0 yyx zz0
> 1 xx1 yy1 zz1 
> 2 xx2 yy2 zz2
> 3 xx3 yy3 zz3
> .
> .
> .
> 90 x90 y90 x90
> 0  xxx0 yyy0 zzz0
> 1  xxx1 yyy1 zzz1
> .
> .
> .
> 90 xxxx90 yyyy90 zzzz90
> 
> Jeg skal have splittet denne fil op i 91 filer afhaengig af vaerdien i 
> den foerste soejle. Indtil nu har jeg gjort det ved at lave et 
> perlscript, der loeber filen igenne, og piller de linjer ud, der har en 
> bestemt vaerdi. Dette script har jeg saa koert (fra et andet perl-script) 
> 91, og jeg kan ikke tro, at det kan betale sig fremfor at koere filen 
> igennem en enkel gang.
> 
> Er der nogen, der har forslag til at optimere det? Skal jeg aabne 91 
> filehandles, og saa skrive til dem undervejs?
> 
> Mvh,
> 
> Claus
> 
> 
> Her er den nuvaerende kode, der kaldes 91 gange med forskellige vaerdier 
> af pos.
> 
> 
> 
> $pos = shift @ARGV;
> $famsize = shift @ARGV;
>  
> if (!defined($pos) || !defined($famsize)) {
>  
>     print "Must specify position and family size\n";
>     exit (1);
> }
>  
> my $oldcode = -1;
>  
>  
> open (FILE, "<ibd_dist.out") || die "Could not open GH-file\n";
> while (<FILE>) {
>     if 
> (/([\-0-9\.]+)\s+([A-Za-z\-0-9]+)\s+([\-0-9]+),([\-0-9]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.\
> ]+)\s+([0-9\.\-]+)\s+([0-9\.\-]+)\s+([0-9\.\-]+)/) {
>         my $filepos    = int($1 + .1);
>         if ($filepos == $pos) {
>             my $fam = $2;
>             my ($id1, $id2) = ($3, $4);
>             my $ibd = $10 + 0.5*$9;
>             my $phi2= $7 + 0.5*$6;
>  
>             $id1 =~ /(\d+)\-(\d+)/;
>             $code1 = $famsize*($1-1)+$2;
>             if ($oldcode != $code1) {
>                 printf "%5d %5d %9.7f\n", $code1, $code1, 1.0;
>                 $oldcode = $code1;
>             }
>             $id2 =~ /(\d+)\-(\d+)/;
>             $code2 = $famsize*($1-1)+$2;
>             if ($2 == $famsize) {
>                 printf "%5d %5d %9.7f\n", $code2, $code2, 1.0;
>             }
>  
>             printf "%5d %5d %9.7f\n", $code1, $code2, $ibd;
>         }
>     }
> }
>  
> close(FILE);
>  
> 



 
Förstasida   Anmälning   Postarkiv   Översikt   Kalender   Sök

 
 
Fel och synpunkter angående webb-sidorna skickas till <www_admin>. Senaste ändring 2005-08-10, klockan 19:53
Denna sidan underholds av MHonArc .