in reply to Re: My first Perl script
in thread My first Perl script

Why do you have the : in open(MYNEWFILE, ">>$my_new_log:") ?

And it looks like you're missing a closing curly brace... you open one for the while loop, open one for the conditional, then close only one...

And how is it not working? Is it not compiling, not providing the results you expect, not providing any results, or...?

Are you 100% positive that you don't need to worry about case sensitivity when checking for "kernel Temporarily blocking host" and "blocked" ? If not, add an i after the trailing /. So it would look like $line =~ /kernel Temporarily blocking host/i

Finally, I always like to suggest the Llama book for perl beginners. Hope some of this helps...

Replies are listed 'Best First'.
Re: Re: Re: My first Perl script
by tarballed (Initiate) on Apr 10, 2003 at 20:13 UTC
    Hello there. Let me put in some revised code that I have done:
    #!/usr/bin/perl #Variables $firewall_log = "/home/jwilliams/firewall.txt"; $my_new_log = "/home/jwilliams/extracted_log"; open(FW_LOG, $firewall_log) or die "$firewall_log open() failed: $!"; open(MYNEWFILE, ">>$my_new_log:") or die "$my_new_log open() failed: $!"; while ($line = <FW_LOG>) { if ($line =~ /kernel Temporarily blocking host/ || $line =~ /block +ed/) { # your line transformations would go here... print MYNEWFILE $line; } } close(FW_LOG); close(MYNEWFILE);
    You are correct. The original reason why it was not working was there was a missing }. Once I placed that in, it was working.

    I will add the i behind the trailing / just to make sure. Better to be cautious, than not cautious at all.

    As far as the: open(MYNEWFILE, ">>$my_new_log:" is concerned, it was something that was suggested to me. Is it not needed? Do you have other recommendations?<p? Also, when the data is extracted, it somes out kinda clumpy. It is not nice and clean. What I mean is there are spaces between the data as well as spaces between each new line. For example:

    data (spaces) data (spaces) data (spaces) data (spaces)

    Spaces

    New line like above

    I was trying to get all the data to be smooth and clean.

    Yes, I just picked up the Llama book today. I am planning on also ordering the Programming Perl and Perl Cookbook today as well. The more books, the better.

    Thanks for your help. It was great. Hopefully my input will help as well.

      Personally I would change

      open(MYNEWFILE, ">>$my_new_log:") or die "$my_new_log open() failed: $!";
      to
      open(MYNEWFILE, ">>$my_new_log") or die "$my_new_log open() failed: $!";

      But that just means that the output file won't have a colon on the end. The colon isn't a valid filename character for Windows (if I recall correctly) and has special meaning on Macs. Not sure if it's a problem for Linux, though. I'd just remove it to be safe(r).

      Also note that the >> before the $my_new_log means "open for append". So if you run this script multiple times the same file will have the new results added at the end. So if you change the way the script works, make sure to look at the end of the file to see them. I've burned myself a few times on this -- wondering why my new changes weren't showing up in the results file... If you want to make a new output file every time (and overwrite the old one) you can change >> to >