我需要將兩個文件合併到一個新文件中。perl中非常龐大的聯合陣列
這兩個有超過300百萬個管道分離的記錄,第一列作爲主鍵。行不排序。第二個文件可能有第一個文件沒有的記錄。
示例文件1:
10|X15X1211,J,S,12,15,100.05
示例文件2:
1231112|AJ32,,,18,JP
10|AJ15,,,16,PP
輸出:
10,X15X1211,J,S,12,15,100.05,AJ15,,,16,PP
我使用下面的代碼段:
tie %hash_REP, 'Tie::File::AsHash', 'rep.in', split => '\|'
my $counter=0;
while (($key,$val) = each %hash_REP) {
if($counter==0) {
print strftime "%a %b %e %H:%M:%S %Y", localtime;
}
}
準備關聯數組需要將近1小時。 它真的很好,還是真的很糟糕? 有沒有更快的方式來處理關聯數組中的記錄大小?任何腳本語言的任何建議都會有幫助。
感謝, 尼廷T.
我也嘗試下面的程序,walso了1+小時是如下:
#!/usr/bin/perl
use POSIX qw(strftime);
my $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime;
print $now_string . "\n";
my %hash;
open FILE, "APP.in" or die $!;
while (my $line = <FILE>) {
chomp($line);
my($key, $val) = split /\|/, $line;
$hash{$key} = $val;
}
close FILE;
my $filename = 'report.txt';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
open FILE, "rep.in" or die $!;
while (my $line = <FILE>) {
chomp($line);
my @words = split /\|/, $line;
for (my $i=0; $i <= $#words; $i++) {
if($i == 0)
{
next;
}
print $fh $words[$i] . "|^"
}
print $fh $hash{$words[0]} . "\n";
}
close FILE;
close $fh;
print "done\n";
my $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime;
print $now_string . "\n";
請不要標記有無關,與你的問題的語言。如果您要求將此Perl代碼轉換爲Python,那麼堆棧溢出就成爲焦點。 – CoryKramer
任何(perl/python)腳本語言想要的建議 –
這個評論迴應你的糟糕的性能結果:http://cpanratings.perl.org/dist/Tie-File-AsHash – toolic