2012-08-01 20 views
0

我有兩個文件,分別是a.txtb.txt。我的任務是搜索b.txt中的所有字符串a.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>; 
    } 
} 

回答

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; 
+0

非常感謝BSen,它的工作原理但是,一旦a.txt的第一個元素被搜索到了,我想將匹配的數據打印到另一個文件中。即在a1.txt中搜索到的第一個元素,在a2.txt中搜索的第二個元素,從而出現。目前你的幫助我能夠將所有元素保存在一個文件中。 – 2012-08-01 06:51:33

+0

你能否幫我修改你給出的代碼來完成我上面評論中提到的任務 – 2012-08-03 00:26:34

+0

如果我明白你想要什麼,那麼在循環外添加一個變量,在每次匹配時增加一個變量並打開句柄到新文件(使用變量形成名稱,例如a1,a2 ...),然後寫入並關閉它 – BSen 2012-08-03 05:49:46

-1

我可以幫助你獲得兩個數組的元素,我didt瞭解如何ü要打印的匹配和未來元素,

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); 
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做什麼?

+0

非常感謝你Hameed.It工程但一旦a.txt的第一個元素已被搜索,我想將匹配的數據打印到另一個文件中。即在a1.txt中搜索到的第一個元素,在a2.txt中搜索的第二個元素,從而出現。目前你的幫助我能夠將所有元素保存在一個文件中 – 2012-08-01 06:56:35

+0

這是否意味着你將擁有與匹配數量一樣多的文件? – Hameed 2012-08-01 07:27:37

+0

非常感謝您的快速回復,.....是的,我將擁有與匹配數量一樣多的文件。如果我在a.txt中有n個元素,那麼將會搜索b.txt中的那些n元素,並且如果爲所有n個元素找到匹配,那麼它們將是n個文件。在我的情況下,這個數字可能在7-10個元素之間變化,因此7-10個文件。 – 2012-08-01 07:41:36

相關問題