Perl script to match a pattern and print lines


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Perl script to match a pattern and print lines
# 1  
Old 12-18-2008
Perl script to match a pattern and print lines

Hi
I have a file (say 'file1')and I want to search for a first occurence of pattern (say 'ERROR') and print ten lines in the file below pattern. I have to code it in PERL and I am using Solaris 5.9.

I appreciate any help with code

Thanks
Ammu
# 2  
Old 12-19-2008
ammu,

Try this script, if it were called... myscript.pl
chmod 755 myscript.pl
cat file1 | ./myscript.pl



#!/usr/bin/env perl

$p=0;
$c=0;
while (<STDIN>) {
if ($p == 0 && m/ERROR/) {
$p=1;
$c=$. + 10;
}

if ($p == 1) {
if ($. < $c) {
print $_;
} else {
last;
}
}
}
# 3  
Old 12-19-2008
Hi, below package contains serverl method, 'getLinesAfterString' may address your issue.

Code:
package LeoFile;
sub new{
	return bless {};
}
sub _open{
	my $file=shift;
	open FH,"<$file";
}
sub _close{
	close FH;
}
sub _checkPattern{
	my($ref,$pat)=(@_);
	@tmp=@{$ref};
	print "@{$ref}" if($matched==1);
}	
sub getLinesAfterString{
	shift;
	my($file,$str,$line)=(@_);
	_open($file);
	my $cnt;
	while(<FH>){
		$flag=1 if(m/$str/);
		if($flag && $cnt<$line){
			print $_;
			$cnt++;
		}
		else{
			$cnt=0;
			$flag=0;
			next;			
		}
	}
	_close;
}
sub getLinesBetweenString{
	shift;
	my($file,$str1,$str2)=(@_);
	_open($file);
	while(<FH>){
		$flag=1 if(m/$str1/);
		print if ($flag==1);
		$flag=0 if(m/$str2/);
	}
	_close;
}
sub getLinesBetweenStringContainPattern{
	shift;
	my($file,$str1,$str2,$pat)=(@_);
	_open($file);
	while(<FH>){
		$flag=1 if(m/$str1/);
		push @arr,$_ if($flag==1);
		$matched=1 if(m/$pat/);
		if(m/$str2/){
			$flag=0;
			_checkPattern(\@arr,$matched);
			undef @arr;
			$matched=0;
		}
	}
	_close;
}
1

# 4  
Old 12-19-2008
perl script for dbms_stats package

Hi,

my sorry i wrote wrong wrongly here
Thanks

Prakash

Last edited by prakash.gr; 12-19-2008 at 03:07 AM.. Reason: wrongly entered in this thread
# 5  
Old 12-19-2008
You can use Tie::File and access the file like an array so its easy to jump lines in a file since you can use the line numbers as the array index.
# 6  
Old 12-19-2008
Code:
open (IN, 'file1') or die "$!";
while (<IN>) { 
   if (m/ERROR/) { 
      for (1..10) {
         <IN>;#skips 10 lines
      }
      print;
      last;#stops the "while" loop
   }
}
close IN;

# 7  
Old 12-22-2008
Quote:
Originally Posted by ammu
Hi
I have a file (say 'file1')and I want to search for a first occurence of pattern (say 'ERROR') and print ten lines in the file below pattern. I have to code it in PERL and I am using Solaris 5.9.

I appreciate any help with code

Thanks
Ammu
One more Solution:

open(FH, "<file1");
@a=<FH>;
$b=$#a;
for ($n=0;$n<$b;$n++)
{

if ($a[$n]=~/ERROR/)
{
foreach $_ ( @a[$n..($n+10)])
{
print $_;
}
}
}
close(FH);

Last edited by jatanig; 12-22-2008 at 04:33 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Match Pattern and print pattern and multiple lines into one line

Hello Experts , require help . See below output: File inputs ------------------------------------------ Server Host = mike id rl images allocated last updated density vimages expiration last read <------- STATUS ------->... (4 Replies)
Discussion started by: tigerhills
4 Replies

2. Shell Programming and Scripting

awk print pattern match line and following lines

Data: Pattern Data Data Data Data Data Data Data Data Data ... With awk, how do I print the pattern matching line, then the subsequent lines following the pattern matching line. Varying number of lines following the pattern matching line. (9 Replies)
Discussion started by: dmesserly
9 Replies

3. Shell Programming and Scripting

Print lines that do not match the pattern

I need to print the lines that do not match a pattern. I tried using grep -v and sed -n '/pattern/!p', but both of them are not working as I am passing the pattern as variable and it can be null some times. Example ........ abcd...... .........abcd...... .........abcd......... (4 Replies)
Discussion started by: sunny1234
4 Replies

4. Shell Programming and Scripting

Need one liner to search pattern and print everything expect 6 lines from where pattern match made

i need to search for a pattern from a big file and print everything expect the next 6 lines from where the pattern match was made. (8 Replies)
Discussion started by: chidori
8 Replies

5. Shell Programming and Scripting

Print lines before and after pattern match

I am using Solaris, I want to print 3 lines before pattern match pattern 5 lines after pattern match Pattern is abcd to be searched in a.txt. Looking for the solution in sed/awk/perl. Thanks .. Input File a.txt: ================= 1 2 3 abcd 4 5 6 7 8 (7 Replies)
Discussion started by: manuswami
7 Replies

6. Shell Programming and Scripting

perl script print the lines between two pattern

i have a file as below sample.pl parameter1 argument1 argument2 parameter2 I want out as below argument1 argument2 that is , i want to print all the lines between parameter1 & parameter 2. i tried with the following if($mystring =~ m/parameter1(.*?)parameter2/) (2 Replies)
Discussion started by: roopa
2 Replies

7. Shell Programming and Scripting

print lines with exact pattern match

I have in a file domain.com. 1909 IN A 1.22.33.44 domain.com. 1909 IN A 22.33.44.55 ns1.domain.com. 1699 IN A 33.44.55.66 ns2.domain.com. 1806 IN A 77.77.66.66 I need to "grep" or "awk" out the lines starting with domain.com. as follows. domain.com. 1909 IN A 1.22.33.44 domain.com.... (3 Replies)
Discussion started by: anilcliff
3 Replies

8. Shell Programming and Scripting

print chunk of lines only if there is a pattern match in between them

Hi All, Please find the sample file below: NAME ID NUMBER -------------------------------------------------------------------------------------------------- --------- abcdefgheija;lksdf ... (13 Replies)
Discussion started by: niel.verty
13 Replies

9. Shell Programming and Scripting

sed print all lines after pattern match

HiCan someone show me how to print all lines from a file after a line matching a pattern using sed?Thanks (13 Replies)
Discussion started by: steadyonabix
13 Replies

10. Shell Programming and Scripting

Perl: Printing Multiple Lines after pattern match

Hello People, Need some assistance/guidance. OUTLINE: Two files (File1 and File2) File1 has some ids such as 009463_3922_1827 897654_8764_5432 File2 has things along the lines of: Query= 009463_3922_1827 length=252 (252 letters) More stufff here ... (5 Replies)
Discussion started by: Deep9000
5 Replies
Login or Register to Ask a Question