如何在perl中使用匹配模式逐行提取
我是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
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/;
}