http://www.perlmonks.org?node_id=1041288


in reply to Extracting time from a log

The problem is that 0.000352383 (which is stored in $1) is not greater than 10.0. You should also escape all the periods because they have special meaning in regexes (perlre).

Replies are listed 'Best First'.
Re^2: Extracting time from a log
by Azur (Initiate) on Jun 28, 2013 at 18:14 UTC
    1) Yes, that output was just an example of the log format. There are several pages which take 2-3 seconds, but even changing 10.0 to 1 or 0 result in no output. 2)Thank you, I thought as much. However, the command doesn't work any better with the periods escaped:  varnishlog -o -i Backend,RxURL,ReqEnd,RxHeader | perl -ne 'BEGIN { $/= "";} print if (/ReqEnd(?:[\sc]+)\d+\s\d+\.\d+\s+\d+\.\d+\s+\d+\.\d+\s+(\d+\.\d+)/ and $1 > 1.0)'
      but even changing 10.0 to 1 or 0 result in no output

      I beg to differ:

      $ echo " 11 SessionOpen c 123.234.56.78 63618 123.234.56.89:80 11 RxURL c /example.php 11 RxHeader c Host: 123.234.56.89 11 RxHeader c User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; r +v:22.0) Gecko/20100101 Firefox/22.0 11 RxHeader c Accept-Language: en-US,en;q=0.5 11 RxHeader c Accept-Encoding: gzip, deflate 11 ReqEnd c 1832330560 1372436083.710740089 1372436083.711302 +519 0.000174284 0.000352383 0.000210047" | perl -ne 'BEGIN { $/="";} +print if (/ReqEnd(?:[\sc]+)\d+\s\d+\.\d+\s+\d+\.\d+\s+\d+\.\d+\s+(\d+ +\.\d+)/ and $1 > 0)'

      Output:

      11 SessionOpen c 123.234.56.78 63618 123.234.56.89:80 11 RxURL c /example.php 11 RxHeader c Host: 123.234.56.89 11 RxHeader c User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; r +v:22.0) Gecko/20100101 Firefox/22.0 11 RxHeader c Accept-Language: en-US,en;q=0.5 11 RxHeader c Accept-Encoding: gzip, deflate 11 ReqEnd c 1832330560 1372436083.710740089 1372436083.711302 +519 0.000174284 0.000352383 0.000210047

      I changed the 10.0 to 0 and it outputted successfully. Perhaps you are overlooking something?

        Yes, clearly I must be, if you get output from that line, because I do not.

        I do get output if I enter...

        varnishlog -o -i Backend,RxURL,ReqEnd,RxHeader

        ...and when I enter...

        ls | perl -ne 'BEGIN { $/= "";} print'

        ...but not when I enter...

         varnishlog -o -i Backend,RxURL,ReqEnd,RxHeader | perl -ne 'BEGIN { $/= "";} print'

        So both parts of the command work individually, but not together!

        Any suggestions as to what I'm missing would be most welcome.

        EDIT: Solved it by redirecting the output to a textfile, then grepping the textfile. Still interested in finding out why the Perl command didn't work.