如何在perl中使用匹配模式逐行提取

如何在perl中使用匹配模式逐行提取,perl,Perl,我是perl新手。我正在尝试下面的代码,以便在我的文本文件merge.txt中包含字符串“length”的行后提取行。我希望得到如下所示的结果。是否有人可以帮助我添加到代码中。谢谢 my @array; While (@array = ‘/Users/Desktop/merged.txt’) { foreach my $line (@array) { if ($line =~ m/length/) { my $a = $arra

我是perl新手。我正在尝试下面的代码,以便在我的文本文件
merge.txt
中包含字符串“length”的行后提取行。我希望得到如下所示的结果。是否有人可以帮助我添加到代码中。谢谢

my @array;    

While (@array = ‘/Users/Desktop/merged.txt’) {    

  foreach my $line (@array) {    

    if ($line =~ m/length/) {      

      my $a = $array[$i+1];    
      push (@array, $a);    
    }  

    my $wanted_type = "$1";      
    print "$wanted_type\n";      
  }      
}    
} 
merge.txt
文件

owner@owner-HP-Z840-Workstation ~/SLM/Desktop/Documents
 % ./count-smRNAs.pl /media/owner/c92ed9e9-3d94-497c-bb2e-514a4806bbcd/merged.fastq 32 32
length  number  A   C   G   T
32  14824945    1992856 1576607 2413263 8756583
owner@owner-HP-Z840-Workstation ~/SLM/Desktop/Documents
 % ./count-smRNAs.pl /media/owner/c92ed9e9-3d94-497c-bb2e-514a4806bbcd/merged.fastq 33 33
length  number  A   C   G   T
33  58619575    1415093 3274505 5499169 48070172
owner@owner-HP-Z840-Workstation ~/SLM/Desktop/Documents
 % ./count-smRNAs.pl /media/owner/c92ed9e9-3d94-497c-bb2e-514a4806bbcd/test.fastq 34 34
length  number  A   C   G   T
34  13018196    1047476 903554  1695778 9296236
我想要的结果如下所示。我还想从第行获取文件名 具有如下所示的
/c92ed9e9-3d94-497c-bb2e-514a4806bbcd/

merged.fastq
32  14824945    1992856 1576607 2413263 8756583
33  58619575    1415093 3274505 5499169 48070172
test.fastq
34  13018196    1047476 903554  1695778 9296236
my$print;
而(){
如果(我的$qfn=/^\s*%\s*\s+\s+(\s+/){
(my$fn=$qfn)=~s{^.*/}{}s;
打印($fn\n);
}
如果$print,则打印;
$print=/length/;
}

我为什么会出现此错误:
无法识别的字符\xE2;由@MAPK标记,您错误复制了我的代码。我的程序中没有此类字符。否。
while('/Users/Desktop/merged.txt')
while(1)
相同,是一个无限循环。保留
while()
并在命令行上以参数形式传递路径。(或者,您需要使用
open
)嗯?这是很基本的。不仅如此,既然你已经知道了整体的作用,你应该很容易弄清楚每一位的作用!你到底需要什么帮助?顺便说一句,从你之前的错误消息中的行号判断,看起来你没有添加
使用严格;使用警告qw(all);
。始终使用这些。(通常不在代码片段中包含它们,因为假定每个人都知道如何使用它们。)当你请求免费帮助修复代码时,请有礼貌地合理地布置代码。我已经在代码中添加了缩进。不客气,但请以后自己做。如果你要让一大群陌生人阅读和理解你的代码,那么尽可能使代码易于理解肯定是礼貌的y缩进显示了一个额外的
}
。我把它放在那里了,但您可能想删除它。
my $print;
while (<>) {
   if ( my $qfn = /^\s*%\s*\S+\s+(\S+)/ ) {
      ( my $fn = $qfn ) =~ s{^.*/}{}s;
      print("$fn\n");
   }

   print if $print;
   $print = /length/;
}