简体   繁体   中英

How to get the next line of file if pattern match in file using Perl script

I am trying to find pattern Pattern String , once it found , I need to get the next line of pattern, which contains page number, I need extract the page number 2 in below sample text file Page: 2 of 5 . Here is my try:

my $filename="sample.txt";
$i=1;
open(FILE, "<$filename") or die "File couldn't be matched $filename\n";
@array = <FILE>;
foreach $line(@array){
chomp($line);
if ($array[$i]=~/(\s+)Pattern String(\s+)/) {
    if ($array[$i]=~/(\s+)Page:(\s+)(.*) of (.*)/) {
        $page = $3;
    }
}

Here is my sample text file :

                                    Pattern String

MCN: 349450A0     NCP Account ID: 999 600-0089           Page: 2 of 5
=============================================================================
Customer Name:    PCS HEALTH SYSTEMS

Customer Number:  349450A0

I think this will solve the problem (I'm assuming that the sample files will always have the same format). I hope this will help you, please let me know if it worked.

my $filename="sample.txt";
my $count = 0;
my $tgline = 0;

open(my $fh, "<", $filename) or die "Failed to open file: $!";
my @lines = <$fh>;

foreach (@lines) {
 if ( $_ =~ /.*Pattern\sString.*/ ) {
  $tgline = $count + 2;
  if ( $lines[$tgline] =~ /.*Page\:\s(\d+)\sof\s(\d+)$/ ) {
   print "Current page: " . $1 . "\n";
   print "Total page #: " . $2 . "\n";
  }
 }
 $count+=1;
}

What about this? Is that what you want? After a match and if next line is not empty then show the line. Let me know if worked for you.

# Perl:
my $filename="sample.txt";
my $match = undef;
my $line = "";

open(my $fh, "<", $filename) or die "Failed to open file: $!";

foreach (<$fh>) {
 $line = $_;
 if ( $line =~ /.*Pattern\sString.*/ ) {
  $match = 1;
  next;
 } 
 if (($match == "1") && ($line !~ /^$/)){
  print $line;
  $match = undef;
 }
}

I don't know why are you matching Pattern String , if your target is achieveing 2 from Page: 2 of 5 from your input file. This is a way to get this:

use warnings;
use strict;

my $filename = "sample.txt";
open my $fh, "<","$filename" or die "Couldn't open $filename: $!";
while (my $line = <$fh>)
{
    if($line =~ m/.*Page:\s(\d+)\sof\s(\d+)$/)
    {
        print "$1\n";
    }
}

sample.txt:

                                    Pattern String

MCN: 349450A0     NCP Account ID: 999 600-0089           Page: 2 of 5
=============================================================================
Customer Name:    PCS HEALTH SYSTEMS

Customer Number:  349450A0 

Output:

2

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM