如何提取与字符串和下一行匹配的行?

时间:2012-08-01 05:53:50

标签: string perl text-extraction

我有两个文件,即a.txtb.txt。我的任务是搜索a.txtb.txt的所有字符串。如果我在a.txtb.txt的字符串之间有任何匹配,那么我想打印与该字符串相对应的行及其文件b.txt中的下一行。

我一直在尝试下面提到的代码,但问题是它没有打印任何东西。你能否指出我的问题并提出解决方法?

open fh,  "<", "b.txt" or die $!;
open fh1, "<", "a.txt" or die $!;

my $array1 = < fh>;
my $array2 = < fh1>;

while (my $array1 = < fh>) {
    if ($array1 =~ m/$array2/i) {
        print $array1;
        print scalar < fh>;
    }
}

3 个答案:

答案 0 :(得分:1)

尝试这样的事情

open  fh, "<", "b.txt" or die $!;
open  fh1, "<", "a.txt" or die $!;

while(my $item1 = <fh>)
{
    while(my $item2 = <fh1>)
    {
        if($item1 =~ m/$item2/i)
        {
            print $item1;
            print <fh>;
        }
    }

    seek fh1, 0, 0;
}

close fh;
close fh1;

答案 1 :(得分:0)

这是显而易见的:

use strict;
use warnings;

my $line1;
my $line2;
my $fh;
my $fh1;
my $counter;

open  $fh, "<", "b.txt" or die $!;
open  $fh1, "<", "a.txt" or die $!;

my @b = <$fh>;
my @a = <$fh1>;

for (@b)
{
    $line1 = $_;
    for (@a)
    {
        $line2 = $_;
        if ($line1 =~ /^$line2$/)
        {
            $counter++;
            open $outfile, ">", "a_${counter}.txt";
            print $outfile $line2;
            close $outfile;
        }
    }
}

我真正理解的是你想用scalar做什么?

答案 2 :(得分:-1)

我可以帮助你获得两个元素数组,我知道你想如何打印匹配的和下一个元素,

use Data::Dumper;
open(FH,  "<$file") or die "$!";
open(FH1,  "<$file1") or die "$!";
my @array1 ;
my @array2 ;


while(<FH>) {
    chomp($_);
    push @array1,$_;
}
while(<FH1>) {
    chomp($_);
    push @array2,$_;
}
close(FH);
close(FH1);
print Dumper(@array1);
print Dumper(@array2);