Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

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

Replies are listed 'Best First'.
Re^5: Join lines that match an string
by kennethk (Abbot) 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 (Curate) 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...


    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?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://849131]
and nobody stirs...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (4)
As of 2017-09-24 04:37 GMT
Find Nodes?
    Voting Booth?
    During the recent solar eclipse, I:

    Results (273 votes). Check out past polls.