rmck <[EMAIL PROTECTED]> wrote:

    Please stop top posting.

: I had to add a "print $sum !=" to inside and outside the
: while loop. Im not sure why it is working this way?? Also
: Im getting an error "Use of uninitialized value in string
: ne at ./clean1.pl line 28, <LOG> line 1." ??

    Break it down to a smaller test case.

use strict;
use warnings;

my $prev_date;
if ( $prev_date ne 'foo' ) {    ## LINE 28 ##
    print 'foo';
}

    Since prev_date does not have value, it cannot be compared
without raising a warning. On the second pass $prev_date has
a value.


: #!/usr/bin/perl
: use Socket;
: use strict;
: use POSIX 'strftime';
: use warnings;
: my $line = $ARGV[0];

   Better named $file or $log_file.


: my $time = strftime "%y%m%d%H", localtime;

   Not used in this script.


: my $sum = 0;
: my $prev_date;

   Undefined on first pass of the while loop.


: # open the file
: open(LOG,"$line") or die "Unable to open LOG:$!\n";

    Don't quote $line. Don't place a newline after $!.
It suppresses line number info.

open LOG, $line or die "Unable to open LOG: $!";

Or:

open LOG, "<$line" or die "Unable to open LOG: $!";


: print "Date_Time, SRCIP, DSTIP, TOTALBYTES \n";

    Ahem...

print "Date_Time, SRCIP, DSTIP, TOTALBYTES\n";

 
: # read it in one record at a time
: #while (<LOG>) {
: while ($line = <LOG>) {

while ( my $line = <LOG> ) {

: next if $line =~ /^\D/;

    chomp $line;

: my ($logdate,$srcip,$dstip,$totalbytes) = split(/\t/,$line);
: my ($date,$time)= split(/\s/,$logdate);

    Why do $current_date amd $prev_date use the underscore
to separate words and the other variables use abbreviations
and no seperation?

my( $log_date,
    $source_ip,
    $destination_ip,
    $total_bytes,    ) = split /\t/, $line;


: my @hour = split(/:/,$time);

    Better written as a scalar.

my $hour = ( split /:/, $time )[0];


: my $current_date = $date;

: if ($hour[0] >= 6 and $hour[0] < 22){
:      if ($prev_date ne $current_date) {    ##LINE 28##

    $prev_date is not defined on first pass.


:    #print "Total: $sum\n";    # display before clearing,
: Prints a Total: 0 on first line
:                if ($sum != 0) {
:    print "Total: $sum\n";
: }
:         $sum = 0;
: }
:        $sum += $totalbytes;
:        $prev_date = $current_date;
: 
: print  "$logdate,$srcip,$dstip,$totalbytes";

    You probably want a newline at the end.

print "$logdate,$srcip,$dstip,$totalbytes\n";


: }
: 
: # End Of While:
:    }


    You don't need this if you line up your indentation.
Every time you start a new code block indent your code.
When the block ends, outdent it.

while ( <LOG> ) {
    next if /^\D/;

    chomp;

    my( $log_date,
        $source_ip,
        $destination_ip,
        $total_bytes    ) = split /\t/;

    my( $current_date, $time ) = split ' ', $log_date;

    my $hour = ( split /:/, $time )[0];
    
    if ( $hour > 5 and $hour < 22 ) {
        if ( $prev_date ne $current_date ) {
            print "Total: $sum\n" if $sum;

            $prev_date = $current_date;
            $sum       = 0;
        }
        $sum += $total_bytes;

        print  "$log_date,$source_ip,$destination_ip,$total_bytes";
    }
}


HTH,

Charles K. Clarkson
-- 
Mobile Homes Specialist
254 968-8328





-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to