0

我有两个文件,即a.txtb.txt。我的任务是搜索a.txtin的所有字符串b.txta.txt如果和的字符串之间有任何匹配b.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>;
    }
}
4

3 回答 3

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;
于 2012-08-01T06:09:34.583 回答
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什么?

于 2012-08-01T06:23:02.427 回答
-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);
于 2012-08-01T06:17:56.143 回答