PERL: extract lines between two patterns


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting PERL: extract lines between two patterns
# 8  
Old 01-23-2012
hi balajesuri..
Nice Script....
Can you please explain me the lineif (/Total Design Power Summary \(Worst/../\|Total/).

I didn't get it clearly. Thanks in advance.
I learn from you very much.
# 9  
Old 01-23-2012
if-condition is true if current line in buffer is in between the two patterns
# 10  
Old 01-23-2012
thats true. but i want to know how does it execute
/Total Design Power Summary \(Worst/../\|Total/
# 11  
Old 01-23-2012
Thanks to all of you for your help. Now I'm able to get my code work.
Posting it below.
Code:
#!/usr/bin/perl 
#use strict; 
#use warnings; 
my $fh; 
my $log; 
my $line;
open($fh,"<","file1") or die "can not open file $fh : $!\n" ; 
open ($log,">","file2")or die "can not open file $log : $!\n" ; 
while($line = <$fh>)
{
   if ($line =~ /pattern1/ ) 
   {  
	  printf $log $line;
	  while($line = <$fh>) 
	  {
		 if($line =~ /pattern2/)
		 {
			printf $log $line;  
			last;
		 } else
		 {
			printf $log $line;  
		 }  
     }
     }
   } 
close $fh;
close $log;

Happy to take your advice to make this code more efficient.

Last edited by Franklin52; 01-24-2012 at 05:08 AM.. Reason: Please use code tags for code and data samples, thank you
# 12  
Old 01-23-2012
@mnithink: Not sure how your code worked! It doesn't work for me. Try this: (and please use code tags)
Code:
#!/usr/bin/perl
use strict; # Its a good practice not to comment these two pragmas.
use warnings;

open I, "< file1";
open O, "> file2";

foreach (<I>) {
    if (/Pattern1/ .. /Pattern2/) { print O }
}

close O;
close I;

@parthmittal2007: (/Pattern1/../Pattern2/) is known as flip-flop operator in perl. Imagine this: While reading a file line by line, perl sets an internal flag to true the moment it encounters 'Pattern1' and the if-block is executed until it encounters 'Pattern2' in a line (when it sees Pattern2, it sets the same internal flag to false). Thus, for lines before Pattern1 or after Pattern2 the flag would be false, thereby failing the if-condition.

For e.g.:
Code:
foreach (<I>) {
    if (/Pattern1/ .. /Pattern2/) { print O }
}

This would print all the lines in between (and inclusive of) 'Pattern1' and 'Pattern2' into the out file-handle.

Last edited by balajesuri; 01-24-2012 at 12:05 AM..
This User Gave Thanks to balajesuri For This Post:
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