- 論壇徽章:
- 0
|
大家好,我寫了個(gè)腳本但是腳本運(yùn)行的特別慢,但是文件小的話(假設(shè)2000行左右)就可以馬上運(yùn)行出來,但是文件大就特別慢好幾天了才出來一點(diǎn)點(diǎn)結(jié)果(400K左右)感覺不太正常,麻煩大家?guī)兔纯慈绾涡薷牟拍茏屗\(yùn)行速度加快,自己也不怎么懂算法,再此謝過了:具體情況見下述 我需要對(duì)一個(gè)4G左右大小的文件進(jìn)行處理,該文件內(nèi)容是這樣的----
ID1 xxx xxx xxx 50
ID1 xxx xxx xxx 60 ID1 xxx xxx xxx 60 即第5列是個(gè)分值,分值高則留下,分值一樣則都保留,ID重復(fù)的次數(shù)是>=2, 絕大部分是>=2的
ID2 xxx xxx xxx 50 ID2 xxx xxx xxx 60
ID2 xxx xxx xxx 60 最終需要得到右邊結(jié)果 ID4 xxx xxx xxx 60
ID3 xxx xxx xxx 50 ID4 xxx xxx xxx 60
ID3 xxx xxx xxx 60 ID3 xxx xxx xxx 60
ID3 xxx xxx xxx 60 ID3 xxx xxx xxx 60
ID4 xxx xxx xxx 60
ID4 xxx xxx xxx 60 (xxx所表示的是不一樣的,所以只是ID 相同行不同)
while(<IN>){
chomp;
my($z,$c)=(split /\t/)[0,4];
$hash{$z}++;
if($hash{$z}==1){
$hash2{$z}=$_;
$hash4{$z}=$c;
}
if($hash{$z}>1){
$hash3{$z}=$_;
$hash5{$z}=$c;
}
}
foreach my $key2(sort keys %hash2){
foreach my $key3(sort keys %hash3){
if($key2 eq $key3){
if($hash4{$key2}>$hash5{$key3}){
print OUT "$hash2{$key2}\n";
}
if($hash4{$key2}<$hash5{$key3}){
print OUT "$hash3{$key3}\n"
}
if($hash4{$key2}==$hash5{$key3}){
print OUT "$hash2{$key2}\n$hash3{$key3}\n";
}
}
}}
|
|