PERL: extract lines between two patterns


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting PERL: extract lines between two patterns
# 1  
Old 01-22-2012
PERL: extract lines between two patterns

Hello Perl-experts,

I am new to perl and need help to solve a problem.

I have a table in below format.
<Text A>
<Pattern1>
A Value
B Value
C Value
D Value
<Pattern2>
<Text B>

This table is in file1. I want to extract lines between Pattern1 and Pattern2 and write it into file2. Please provide me some help to do this. Thanks
# 2  
Old 01-22-2012
can you please write the real environment example
# 3  
Old 01-22-2012
Thanks for your reply.

please find the actual code below.
Code:
#!/usr/bin/perl
use strict;
use warnings;

our $fh;
our $log;

open($fh,">","block.power");
open ($log,">","temp.log") or die "can not open file $log : $!\n" ;
while($fh){
   if (/Total Design Power Summary \(Worst/ ... /\|Total/)
  {printf $log;}
}

I'm getting below message when i run this script.
Code:
Use of uninitialized value in pattern match (m//) at temp.pl line 11.


Last edited by Franklin52; 01-22-2012 at 08:05 AM.. Reason: Please use code tags for data and code samples, thank you
# 4  
Old 01-22-2012
if (/Total Design Power Summary \(Worst/ ... /\|Total/)
whats this
# 5  
Old 01-22-2012
See if this helps...
Code:
perl -ne ' if(/<Pattern2>/){$p=0} if(/<Pattern1>/){$p=1;next}print if$p' infile > outfile

--ahamed

Last edited by ahamed101; 01-22-2012 at 06:24 AM..
# 6  
Old 01-22-2012
Code:
#!/usr/bin/perl -w
use strict;
use warnings;

print "enter the first pattern-:\n";
my $pat1=<>;
print "enter the second pattern-:\n";
my $pat2=<>;
my $en1=0;
my $en2=0;
open FILE, "<file1.txt" or die $!;
#my @lines=<FILE>;
my $i =0;
while(<FILE>)
{
	$i++;
if( $_ eq $pat1)
{	$en1=$i;
}
if( $_ eq $pat2)
{	 $en2=$i;
}
}
close(FILE);

open FILE, "<file1.txt" or die $!;
my @lines=<FILE>;

for(my $j=$en1; $j<($en2-1); $j++)
{
	print $lines[$j];
}
close(FILE);

check this if it helps you and please manipulate as per your requirment

---------- Post updated at 12:45 PM ---------- Previous update was at 12:45 PM ----------

Code:
#!/usr/bin/perl -w
use strict;
use warnings;

print "enter the first pattern-:\n";
my $pat1=<>;
print "enter the second pattern-:\n";
my $pat2=<>;
my $en1=0;
my $en2=0;
open FILE, "<file1.txt" or die $!;
#my @lines=<FILE>;
my $i =0;
while(<FILE>)
{
	$i++;
if( $_ eq $pat1)
{	$en1=$i;
}
if( $_ eq $pat2)
{	 $en2=$i;
}
}
close(FILE);

open FILE, "<file1.txt" or die $!;
my @lines=<FILE>;

for(my $j=$en1; $j<($en2-1); $j++)
{
	print $lines[$j];
}
close(FILE);

chech this if it helps you and please manipulate as per your requirment

Last edited by Franklin52; 01-23-2012 at 10:11 AM.. Reason: Please use code tags for data and code samples, thank you
# 7  
Old 01-22-2012
With possible corrections.

Code:
#!/usr/bin/perl
use strict;
use warnings;

our $fh;
our $log;

open($fh,"<","block.power"); # Here the arrow should point towards left to imply you're reading from file.
open ($log,">>","temp.log") or die "can not open file $log : $!\n" ; # Use >> to append. You don't want the log file to contain only the last printed line, do you?
while($fh){
   if (/Total Design Power Summary \(Worst/../\|Total/)
  {printf $log;}
}
close $log; #Though your file handles would close upon exit, 
close $fh; # its always a good practice to close them yourself.

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

How to print lines from a files with specific start and end patterns and pick only the last lines?

Hi, I need to print lines which are matching with start pattern "SELECT" and END PATTERN ";" and only select the last "select" statement including the ";" . I have attached sample input file and the desired input should be as: INPUT FORMAT: SELECT ABCD, DEFGH, DFGHJ, JKLMN, AXCVB,... (5 Replies)
Discussion started by: nani2019
5 Replies

2. UNIX for Beginners Questions & Answers

Delete multiple lines between blank lines containing two patterns

Hi all, I'm looking for a way (sed or awk) to delete multiple lines between blank lines containing two patterns ex: user: alpha parameter_1 = 15 parameter_2 = 1 parameter_3 = 0 user: alpha parameter_1 = 15 parameter_2 = 1 parameter_3 = 0 user: alpha parameter_1 = 16... (3 Replies)
Discussion started by: ce9888
3 Replies

3. Shell Programming and Scripting

Extract lines between patterns

I have a list in the format below, how do I read through the list and extract the lines between the ##START## and ##END##, so i can check for specific values between each ##START## & ##END## pattern ##START## RANDOMTEXT DFGSD SDFSDF ##END## ##START## morestuff sdfggfg sdfsdf... (10 Replies)
Discussion started by: squrcles
10 Replies

4. Debian

Extract Lines Between 2 patterns if exist...

Hello. I am not having luck with sed or awk today. $ echo "$BrackListFinal" DSCF3649-DSCF3651_Brkt DSCF3649.JPG 2014-07-21 13:34:44 On 1 DSCF3649.RAF 2014-07-21 13:34:44 On 1 DSCF3650.JPG 2014-07-21 13:34:45 On 2 DSCF3650.RAF 2014-07-21 13:34:45 On 2... (3 Replies)
Discussion started by: DSommers
3 Replies

5. Shell Programming and Scripting

Extract all the lines in between of 2 patterns and merge them

Hi, I have a file with many lines and need to extract lines between 2 patterns (AAA and BBB) and merge all the in-between lines into single line separated by space. $ cat file1 blah blah blah blah AAA 1 2 3 blah BBB blah blah blah blah blah blah blah blah blah AAA 5 6 blah blah... (4 Replies)
Discussion started by: prvnrk
4 Replies

6. Shell Programming and Scripting

Perl : to print the lines between two patterns

Hello experts, I have a text file from which I need to print all the lines between the patterns. Could anyone please help me with the perl script. names.txt ========= Badger Bald Eagle Bandicoot Bangle Tiger Barnacle Barracuda Basilisk Bass Basset Hound Beetle Beluga... (7 Replies)
Discussion started by: scriptscript
7 Replies

7. Shell Programming and Scripting

Extract certain patterns from file.

Hi All, I tried extracting this pattern using grep but it did not work. What I have is a file which has contents like this: file:///channel/add-adhd.html file:///channel/allergies.html file:///channel/arthritis.html http://mail.yahoo.com/ http://messenger.yahoo.com/... (2 Replies)
Discussion started by: shoaibjameel123
2 Replies

8. Shell Programming and Scripting

PERL: Extract random record which has 4 lines each

Hi, I have a data file with millions of record (N). Each record was saved in 4 lines. So there are total of NX4 lines in the data file. For Example: Host1 a b c d Host2 e f g h Host3 i j k (2 Replies)
Discussion started by: phoeberunner
2 Replies

9. Shell Programming and Scripting

Searching patterns in 1 file and deleting all lines with those patterns in 2nd file

Hi Gurus, I have a file say for ex. file1 which has 3500 lines in it which are different account numbers and another file (file2) which has 230000 lines in it. I want to read all the lines in file1 and delete all those lines from file2 which has that same pattern as in file1. I am not quite... (4 Replies)
Discussion started by: toms
4 Replies

10. Shell Programming and Scripting

To extract the string between two patterns

Sample input: Loading File System Networking in nature Closing the System now i need to extract the patterns between the words File and Closing: i.e. sample output: System Networking in Nature Thanks in advance !!!!!!!!!!!!!!!!! (6 Replies)
Discussion started by: aajan
6 Replies
Login or Register to Ask a Question