Re: [PERL] Optimering
- To: sslug@sslug
- Subject: Re: [PERL] Optimering
- From: ariel <sslug@sslug>
- Date: Sat, 28 Oct 2000 21:56:21 +0200 (CEST)
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);
>
>
 |
 |
 |
| |
|
|
 |
| |
|
Fel och synpunkter angående webb-sidorna skickas till <www_admin>.
|
Senaste ändring
2005-08-10, klockan 19:53
Denna sidan underholds av
MHonArc
.
|
|
|
 |
 |
 |