mercuryshipz has asked for the wisdom of the Perl Monks concerning the following question:
OUTPUT#!/usr/bin/perl #use strict; use warnings; sub search_pattern { my $file_name = $_[0]; my $search = $_[1]; open(LOGFILE, $_[0]) or die("Error: cannot open file '$_[0]' +\n"); while (<LOGFILE>) { if ( $_ =~ /$search/ ) { my $val = $`; #Matches Everything after pattern $val =~ s/^\s+//; #remove leading spaces $val =~ s/\s+$//; #remove trailing spaces $val =~ s/\D//g; #Just has the digits. All other charcters are filter +ed. #print "$val\n"; print "\nFirst Occurence:$val \n"; my $line = $.; print "Line number:$line\n"; #$temp = $line; #print "$temp"; #print "$."; last; } } } my $file_n ="test.txt"; my $search_p = "This is phrase 2"; &search_pattern($file_n, $search_p);
First Occurence:90
Line number:3
Hi guys,
My code above searches for the first occurence of a phrase and returns the line number...
What if i wanna search for multiple search phrases in a single file and return the line numbers.
For example:
test.txt
1.This is phrase 1
2.This is phrase 3
3.This is phrase 2
4.This is phrase 3
any text in between
5.This is phrase 5
any text in between
6.This is phrase 4
7.This is phrase 1
8.This is phrase 2
9.This is phrase 3
10.This is phrase 6
11.This is phrase 7
12.This is phrase 1
13.This is phrase 2
14.This is phrase 3
15.This is phrase 4
16.This is phrase 8
17.This is phrase 1
.................
.................
i have given the line numbers for my reference in reality, it is not present...
The arguments passed are file_name and Search phrases (for eg: this is phrase1, this is phrase 2, This Phrase 3, phrase 5...)
The number of arguments passed may vary... But the first argument is always the file_name.
first it will check for phrase 1 and then from that line number phrase 2 (even though in our case Phrase 3 come in between phrase 2 ie., line 2 we need phrase 2 first and then phrase 3) and then phrase 3 and return phrase 3.
lets say we have 4 arguments including file name...
if (phrase 1 exists) ---------- if (phrase 1 doesnt exists)
from that line number ----------- search for phrase 2
search for phrase 2 ---------- if (phrase 2 also doesnt exists)
from that line number ---------- search for phrase 2 and return phrase 3
---------if (phrase 3 also doesnt exists)
----------- return phrase 2
----------- else phrase 1
search for phrase 3 ----------- if none of them exists display a message
return the phrase 3
the reason iam keeping track of line number is so that the file is not parsed from line 1.
if i know the number of arguments passed then its fine...
But the thing is what if i dont know the number of arguments presents.
can anybody suggest how do i proceed for this problem.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: search pattern and arrays
by apl (Monsignor) on Jan 23, 2008 at 18:43 UTC | |
| |
|
Re: search pattern and arrays
by johngg (Canon) on Jan 23, 2008 at 20:31 UTC | |
by Anonymous Monk on Jan 23, 2008 at 21:30 UTC | |
by johngg (Canon) on Jan 23, 2008 at 22:21 UTC | |
by mercuryshipz (Acolyte) on Jan 23, 2008 at 22:34 UTC | |
by johngg (Canon) on Jan 24, 2008 at 00:25 UTC | |
| |
|
Re: search pattern and arrays
by toolic (Bishop) on Jan 23, 2008 at 19:09 UTC | |
|
Re: search pattern and arrays
by poolpi (Hermit) on Jan 25, 2008 at 08:58 UTC |