Denham Eva wrote: > > Hello listers, Hello,
> I would like to submit a script I have written and it does work. However I > am sure that it can be: > a. Shorter > b. Faster > As you will see it is not very well written. Certainly nothing compared to > some of the listers code I have seen here. > I am new at perl so here goes. Some of you might recognise the sample a part > of a Oracle export log, which it is. > Now I am not confident enough to use the unedited log and stripping it with > perl(maybe oneday), anyway that has already been done with tools like grep > and cut. > <Script> > #Perl Script to Compare two backup logs and then identify > # substantial differences in changed tables. > use strict; > use warnings; > > #Open the newer backup log. > open FILE, "C:/tmp/max_grow/max1.log" or die "Cann't open : $!"; > while(<FILE>){ > chomp; > > #Input to be divided in two: > #Sample of file is - > # APPDOCTYPE 43 > # APPLAUNCH 16 > # APTRANS 1245 > # ARCHIVE 0 > # ASICUST 24 > # ASILINK 5 > # ASSETATTRIBUTE 736 > # ASSETCLASS 1667 > # ASSIGNMENT 60648 > # ATTENDANCE 103193 > > #Divide the input into two groups > s/(.*\D)+(.*\d)/$2 $1/; > > #Pass the two groups to variables > my $value1 = $2; > my $tblnam1 = $1; > > #Remove all unnecessary spaces. > for ($tblnam1) { > s/^\s+//; > s/\s*$//;} > for ($value1) { > s/^\s+//; > s/\s*$//;} > > #Open the older log > open FILE2, "C:/tmp/max_grow/max4.log" or die "Cann't open : $!"; > while(<FILE2>){ > chomp; > s/(.*\D)+(.*\d)/$2 $1/; > > my $value2 = $2; > my $tblnam2 = $1; > > > for ($tblnam2) { > s/^\s+//; > s/\s*$//;} > for ($value2) { > s/^\s+//; > s/\s*$//;} > > # Compare the two logfiles here. > if($tblnam1 eq $tblnam2) { > my $diff = $value2 - $value1; > if($diff > 1000){ > print "$tblnam1 :The difference is $diff\n"; > } > } > > } > } I would probably do something like this: use strict; use warnings; my $log_new = 'C:/tmp/max_grow/max1.log'; my $log_old = 'C:/tmp/max_grow/max4.log'; my %data; #Open the newer backup log. open FILE, $log_new or die "Cannot open $log_new: $!"; while ( <FILE> ) { next unless my( $table, $value ) = /([A-Z]+)\s*(\d+)/; $data{$table} = $value; } close FILE; #Open the older log open FILE, $log_old or die "Cannot open $log_old: $!"; while ( <FILE> ) { next unless my( $table, $value ) = /([A-Z]+)\s*(\d+)/; # Compare the two logfiles here. if ( exists $data{$table} ) { my $diff = $value - $data{$table}; if ( $diff > 1000 ) { print "$table :The difference is $diff\n"; } } } __END__ John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]