Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Re: grep lines from log for last 10 mints

by aitap (Deacon)
on Aug 06, 2012 at 11:42 UTC ( #985678=note: print w/replies, xml ) Need Help??

in reply to grep lines from log for last 10 mints

Use Date::Parse and -n switch to construct this oneliner:
perl -MDate::Parse -e'BEGIN{$main::now=time;$main::old=(time-60*10)}' +-nE'if(/^(\w+\s+\d+\s+\d+:\d+:\d+)/) {$t=str2time $1; $t > $old && $t + < $now && print}'
time is used to determine the current time as unix timestamp. Regular exression (some "word symbols", some space symbols, some numeric characters, some space symbols, then three groups of numeric characters delimeted by ":") is used to find the date from the string. Then it's parsed using str2time to unix timestamp, then it's compared to the timestamps found earlier, and the string being read is printed (print without arguments prints the special variable $_).
Sorry if my advice was wrong.

Replies are listed 'Best First'.
Re^2: grep lines from log for last 10 mints
by bimleshsharma (Beadle) on Aug 07, 2012 at 09:11 UTC
    I tried below by passing file name as cmd args(i guessed) but it is not running. it is going second line of command prompt(>). Can you please suggest how to run this.
    perl -MDate::Parse -e'BEGIN{$main::now=time;$main::old=(time-60*10)}' +-nE'if(/^(\w+\s+\d+\s+\d+:\d+:\d+)/) {$t=str2time $1; $t > $old && $t + < $now && print}'
      Sorry, I couldn't understand you.
      Does it just terminate without any output when you run it, or the shell tries to make you input some more text? Can you show the exact command you run (you said that you tried passing the filename as a commandline argument, which is right)? What shell are you using? Can you show a small example of file being parsed?
      You can also put the whole oneliner in a file, like this:
      #!/usr/bin/perl -n # note the -n switch use Date::Parse; use features 'say'; BEGIN{$main::now=time;$main::old=(time-60*10)} if(/^(\w+\s+\d+\s+\d+:\d+:\d+)/) {$t=str2time $1; $t > $old && $t < $n +ow && print}
      And then run it passing file names as a command line arguments (perl my_log_1.log my_log_2.log) or feeding them to STDIN (cat my_log_*.log | perl
      Sorry if my advice was wrong.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://985678]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (3)
As of 2017-06-26 00:37 GMT
Find Nodes?
    Voting Booth?
    How many monitors do you use while coding?

    Results (572 votes). Check out past polls.