Sortieren, um alle Datensätze mit den gleichen ersten 3 Tripletts nebeneinander zu stellen. Iterieren Sie und geben Sie eine Zwischensumme aus, wenn ein anderer Satz von Tripletts erscheint.
$prevKey="";
$subtotal=0;
open(INPUTFILE, "<$inFile");
@lines=<INPUTFILE>;
close (INPUTFILE);
open(OUTFILE, ">$outFile");
@sorted=sort(@lines);
foreach $line(@lines){
@parts=split(/\|/g, $line);
$value=pop(@parts);
$value-=0; #coerce string to a number
$key=$parts[0]."|".$parts[1]."|".$parts[2];
if($key ne $prevKey){
print OUTFILE "$prevKey|$subtotal\n";
$prevKey=$key;
$subtotal=0;
}
$subtotal+=$value;
}
close(OUTFILE);
Wenn die Sortierung von 2 Millionen Ihre Box erdrückt, müssen Sie möglicherweise jeden Datensatz in eine Datei auf der Grundlage der Gruppe einfügen und dann die Zwischensumme für jede Datei bilden.