标题: [问题求助] Perl怎样获取指定字符串所在行的上N行和下M行? [打印本页]
作者: DAIC 时间: 2011-6-6 12:22 标题: Perl怎样获取指定字符串所在行的上N行和下M行?
a.txt内容如下:
111perl
222perl
333perl
444perl
555perl
666perl
假设N=2,M=1,想获取字符串“444perl”所在行的上两行到下一行之间的内容:
222perl
333perl
444perl
555perl
作者: sxw 时间: 2011-6-6 21:57
- #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;
复制代码
求高人简化一下。用seek出现问题了:行号变了
作者: 523066680 时间: 2011-6-6 22:22
我觉得一般可能要考虑一段落中如果出现 多个 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>;
复制代码
以上代码只是对存在444perl行的前两到后一行进行枚举,并没有判断范围是否超标。
作者: Batcher 时间: 2011-6-6 22:25
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;
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |