On Friday 14 December 2001 04:39, you wrote:
> Hi all,
>
> Need a little help on summarising 2 different tables into 1, based on a
> particular field.
>
> The 2 tables (they are actually content from a log file) look like the
> follow :
>
> Table #1
> ------------
> 1006788900 198 36
> 1006788600 29 35
> 1006788300 18 75
> 1006788000 19 65
> 1006787700 42 37
> 1006787400 29 26
> 1006787100 65 84
> 1006786800 6 87
>
> Table #2
> ------------
> 1006789500 43 47
> 1006789200 23 64
> 1006788900 198 36
> 1006788600 29 35
> 1006788300 18 75
> 1006788000 19 65
> 1006787700 42 37
> 1006787400 29 26
>
> They may not be of equal length. The first field is TIME, 2nd is INPUT and
> 3rd is OUTPUT. Basically, what I want to do is to summarise the table based
> on the first field (TIME). For example, if both tables have TIME as
> 1006788600, INPUT and OUTPUT from both tables whose TIME is 1006788600 will
> be summed up. Meaning the script needs to go thru the tables to look for
> entries with the same TIME, and add the INPUT and OUTPUT together to form
> another summaried table.
I cannot help you with funky perl... But is a classic programming problem
from the days of tape streamers and COBOL. It is called a `merge' ,
suprisingly. This is a very efficient way to merge large amounts of data.
The only gotcha is that the files must be sorted on the merge key (ie TIME),
which I am happily asuming since it is a timestamp. There might be the odd
ocasion that the input files are not sorted( Machine bounced and the BIOS
clock resets itself). Putting a sorted file thru a quick sort uses virtually
no resources, and then you will be garanteed to get the correct results.
This is a lot more typing but classic algorithms are such joy to code.. (For
me anyway);
Pseudo code:
open file1, file2
(time1, input1, output) = read file1
(time2, input2, output2) = read file1
while not end of file file1 and file2 {
if (time1 == time2 {
input = input1 + input2
readboth = true;
}
if (time1 < time2) {
input = input1
read1 = true;
}
if (time2 < time1) {
input = input2
read2 = true;
}
write summary with input
if (read1 || readboth ) {
if not eof file1 then (time1, input1, output) = read file1
};
if (read2 || readboth ) {
if not eof file2 (time2, input2, output2) = read file1
}
readboth, read1, read2 = false
}
Regards
Johan
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]