返回列表 发帖

[问题求助] Perl怎样获取指定字符串所在行的上N行和下M行?

a.txt内容如下:
111perl
222perl
333perl
444perl
555perl
666perl

假设N=2,M=1,想获取字符串“444perl”所在行的上两行到下一行之间的内容:
222perl
333perl
444perl
555perl

#usr/bin/perl
open (FH,"<a.txt") || die "Can't find it\n";
while (<FH>) {
$a=$. if /444perl/;
}
close FH;
open (FH,"<a.txt") || die "Can't find it\n";
$b=$a-2;
$c=$a+1;
if ($b..$c) {print};
close FH;COPY
求高人简化一下。用seek出现问题了:行号变了

TOP

我觉得一般可能要考虑一段落中如果出现 多个 444perl的情况……
罢了,先大致做一下,有细节再说。学习学习
open READ,"<src.txt";
@all=<READ>;
$n=2;
$m=1;
$line=0;
foreach (@all) {
chomp;
$line+=1;
if (/^444perl$/) {
for $tmp (($line-$n) .. ($line+$m)) {
print "Line$tmp : $all[$tmp-1]\n";
}
}
}
<STDIN>;COPY
以上代码只是对存在444perl行的前两到后一行进行枚举,并没有判断范围是否超标。
[url=][/url]

TOP

2# sxw


你是不是下面这个想法?
open (IN,"a.txt");
while (<IN>) {
    $a = $. if /444perl/;
}
close IN;
my $b = $a - 2;
my $c = $a + 1;
open (IN,"a.txt");
while (<IN>) {
    print if $. >= $b && $. <= $c;
}
close IN;COPY
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表