Avinash
Avinash

Reputation: 13257

How do I split a file on a delimiter that is on its own line?

I have the following file:

some data
some data 1
some data 1
hostname = abc
some data
some data 1
some data 1
some data
some data 1
some data 1
hostname = xyz
some data
some data 1
some data 1
some data
some data 1
some data 1
hostname = pqr
some data
some data 1
some data 1
some data
some data 1
some data 1

How can I extract the lines between two hostname line entries using Perl?

Upvotes: 0

Views: 346

Answers (4)

Bee
Bee

Reputation: 958

How about:

#!perl -w
my @someArray;

while (<DATA>) {
    if (/hostname.*/) {
        print @someArray;
        @someArray = ();
    }
    else {
        push (@someArray, $_);
    }
}

__DATA__
some data
some data 1
some data 1
hostname = abc
some data
some data 1
some data 1
some data
some data 1
some data 1
hostname = xyz
some data
some data 1
some data 1

Upvotes: 1

daxim
daxim

Reputation: 39158

split indeed suffices, just give it the right pattern.

use DDS; Dump split /hostname = .*\n/, 'some data
some data 1
some data 1
hostname = abc
some data
some data 1
some data 1
some data
some data 1
some data 1
hostname = xyz
some data
some data 1
some data 1
some data
some data 1
some data 1
hostname = pqr
some data
some data 1
some data 1
some data
some data 1
some data 1';

output

$VAR1 = "some data\nsome data 1\nsome data 1\n";
$VAR2 = "some data\nsome data 1\nsome data 1\nsome data\nsome data 1\nsome data 1\n";
$VAR3 = "some data\nsome data 1\nsome data 1\nsome data\nsome data 1\nsome data 1\n";
$VAR4 = "some data\nsome data 1\nsome data 1\nsome data\nsome data 1\nsome data 1";

Upvotes: 0

mu is too short
mu is too short

Reputation: 434635

Slurp the whole thing into a string, $string, and do something like this:

$string =~ /hostname = abc\n(.*)hostname = xyz\n/s;

The lines between the abc and xyz hostname lines will be in $1 after that.

Upvotes: 0

shawnhcorey
shawnhcorey

Reputation: 3601

perl -nle'/hostname = abc/../hostname = xyz/&&print' datafile

Upvotes: 0

Related Questions