in reply to Re: Split string variable of log input and output pieces in text file
in thread Split string variable of log input and output pieces in text file

Thankyou very much for this. If you can explain how the regex works with // pattern matching that would be great. Especially since I have other log files with different formats.

  • Comment on Re^2: Split string variable of log input and output pieces in text file

Replies are listed 'Best First'.
Re^3: Split string variable of log input and output pieces in text file
by Marshall (Canon) on Apr 17, 2016 at 18:39 UTC
    Ok, split /[\s:()]+/,$line>, please read http://perldoc.perl.org/functions/split.html.

    Split takes a line as input and makes an array according to the split regex. The split regex defines what constitutes a new array element boundary. During the split process the "separators" are "consumed", meaning deleted.

    The regex above says: "if I see one or more, spaces, colons or left paren or right paren", delete those and move what is left over to the left as an array element. This part: [6,7,8,-2] says ok, I've lots of stuff but I only want the 7th,8th,9th thing and the 2nd one from the end. Perl arrays are indexed at zero. So the first one is index[0]. Run my "hint" code and see what happens if you delete () from the regex. Experimentation is key. Run some examples and report back.

    This is not a perfect analogy, but if you had an old style typewriter and hit "carriage return" every time you saw the matching regex, you would wind up with my "hint" code.

      Thankyou Marshall for explaining this. Now I am able to adapt the split regex according to other log formats that I have

      Hi Marshall if I have a log now that I want the separators [] to be consumed, do I need to change the limiters? Or just modify the code like so:

       split /[[]\s:()]+/,$line>
        split /[[]\s:()]+/,$line>

        Have you tried to use the quoted code? What happens if you do? (I'm not sure what the  '>' on the end of this code fragment is supposed to be.)

        I'm not familiar with your data, but I think I would try (untested)
            split /[\[\]\s:()]+/, $line
        instead. Be aware that this may generate an extraneous empty string at the beginning of the split output list, so your selection indices may need adjustment.


        Give a man a fish:  <%-{-{-{-<