- 论坛徽章:
- 1
|
我有一个文件,格式如下:
.......................
2015-7-6 15:28:15 CHI75156491GJBN13231000521
2015-7-6 15:30:06 BS7546152075123456789A
2015-7-6 15:30:08 CAB7537152075546115654526
.......................
2015-7-6 15:30:16 CAB75461520753659K784421
.......................
2015-7-6 15:31:20 BS7538152075123456789B4
.......................
2015-7-6 15:31:31 CS7538152075354253442B8752
.......................
符号"........"是代表中间有很多类似的行
我想实现打印出包含字符串"75(\d{6})75123456789"的行和包含$1的行并保存到result文件中,上面部分内容的结果为:
2015-7-6 15:30:06 BS7546152075123456789A
2015-7-6 15:30:16 CAB75461520753659K784421
2015-7-6 15:31:20 BS7538152075123456789B4
2015-7-6 15:31:31 CS7538152075354253442B8752
程序如下:
use strict;
open(MYFILE,"E:/log1.txt") or die("Can't open log1.txt");
open(OUTFILE,">E:/result.txt") or die("Can't open result.txt");
# $/ = undef;
my @b = <MYFILE>;
my $count1 = 0;
my $count2 = 0;
my ($b, $c);
foreach $b (@b){
if($b =~ /75(\d{6})75123456789/){
$a = $1;
$count1++;
foreach $c (@b){
if($c =~ /75($a)75/){
$count2++;
print OUTFILE "$a\n";
print OUTFILE "$b\n";
print OUTFILE "$c\n";
}
}
}
}
print "$count1\n";
print "$count2\n";
close MYFILE;
close OUTFILE;
但是,我发现这样我第二次读取文件也是读取了整个文件,而不是读取第一次匹配之后的行,因为文件中第一次匹配的行前面的行也可能包含有$1,这就把前面的行也打印出来了,我现在只想打印第一次匹配之后包含 $1 的行,这该如何实现呢? |
|