Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^4: Join lines that match an string

by Anonymous Monk
on Jul 12, 2010 at 23:50 UTC ( #849131=note: print w/ replies, xml ) Need Help??


in reply to Re^3: Join lines that match an string
in thread Join lines that match an string

Kennethk, there's no output after running your code

Now let me clarify myself; I have a file with tons of lines, but there're many lines that I want to join in one and I found that I can match the start with "remotely" and the end with "p_agrs", so the lines that are in the middle would be in the one which contains "remotely", later I'll drop the rest of them using a grep remotely data01 > data02


Comment on Re^4: Join lines that match an string
Re^5: Join lines that match an string
by kennethk (Monsignor) on Jul 13, 2010 at 00:25 UTC
    I am confused. If I copy the posted file:

    EV = 0x10eb250 (class, event_handle: 3503519, mc_ueid: 1278629168) 20100708 224608.259843 RULES: IMC110203I: #3503519: $EV.m c_host 20100708 224608.260757 RULES: IMC110801I: #3503519: Rule e execution starting with . . . msg='script to be execute remotely: exists("TRUSTEDALARM"); Local Id: Rem_010965WAP_18504'; . . . p_agrs

    into the file 'input.txt' and then execute the command

    perl -e 'while(<>){chomp; last if /p_agrs/;print if /remotely/}' < input.txt

    I get the output

    msg='script to be execute remotely:

    Is this not consistent with what you observe?

Re^5: Join lines that match an string
by linuxer (Deacon) on Jul 13, 2010 at 08:52 UTC

    From the discussion I see that I misunderstood your initial posting. But I am as confused as kennethk is.

    What I think so far:

    • you have a file with a lot of lines
    • you want to match several lines and join them into one
    • the lines you want to match build a consecutive range (e.g. lines 5-11)
    • the range of lines you want to match starts with a line containing the string "remotely"
    • the range of lines you want match ends with a line containing the string "p_agrs"

    Based upon that, I guessed this code:

    #! /usr/bin/perl use strict; use warnings; # open file and read from that handle... while ( <DATA> ) { chomp; print if m/remotely/ ... m/p_agrs/; print $/ if m/p_agrs/; } __DATA__ not me foo remotely bar01 bar02 bar03 p_agrs i am not here foo2 remotely barbar01 p_agrs i am out...

    result:

    foo remotelybar01bar02bar03p_agrs foo2 remotelybarbar01p_agrs

      What really isn't clear in the OP is whether you want to keep the lines you don't join in the output or throw those lines away. This isn't even clear from your detailed description, though in your code you throw them away. I assumed the OP wanted to keep those lines and only change the joined lines.

        My detailed description could not be clear for that detail.

        I simply tried to summarize those conditions, which got clear enough to me (as I am not the OP).

        From my personal experience with similar exercises I tend to drop/ignore those lines.

        I think my example shows that.

        But I learned that my guess (to drop those lines, which aren't to be joined) was wrong.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://849131]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (15)
As of 2014-08-27 17:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (247 votes), past polls