Сортировать, чтобы поместить все записи с одинаковыми первыми 3-мя тройками рядом друг с другом. Выполните итерацию и выведите промежуточный итог, когда появится другой набор триплетов.
$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);
Если сортировать 2 миллиона дросселей в вашем ящике, вам, возможно, придется поместить каждую запись в файл, основанный на группе, а затем выполнить промежуточный итог для каждого файла.