我有一个子图数据库,如下所示:
t # 3-231, 1
v 0 94
v 1 14
v 2 16
v 3 17
u 0 1 2
u 0 2 2
u 0 3 2
t # 3-232, 1
v 0 14
v 1 94
v 2 19
v 3 91
u 0 1 2
u 0 3 2
u 1 2 2
t # 3-233, 1
v 0 17
v 1 91
v 2 16
v 3 94
u 0 1 2
u 0 3 2
u 1 2 2
t # 3-234, 1
v 0 90
v 1 93
v 2 102
v 3 95
u 0 1 2
u 0 3 2
u 1 2 2
我想检索包含以下模式的所有交易:“u 0 1 2”和“u 0 2 2”以及交易 ID(例如以 t # 开头的行)。
我使用以下代码来完成这项工作:
#!/usr/bin/perl -w
use strict;
my $input = shift @ARGV or die $!;
open (FILE, "$input") or die $!;
while (<FILE>) {
my @fields = ('t', 'u\ 0\ 1', 'u\ 0\ 2');
my $field_regex = join( "|", @fields );
my @field_lines;
push( @field_lines, $_ ) if ( /^(?:$field_regex) / );
last if @field_lines == @fields;
push @field_lines, "";
print join( "\n", sort @field_lines );
}
close FILE;
但是,当只有一行匹配时,它会检索模式,例如:
t # 3-231, 1
u 0 1 2
u 0 2 2
t # 3-232, 1
u 0 1 2
t # 3-233, 1
u 0 1 2
t # 3-233, 1
u 0 1 2
我的最终目标是检索与我的正则表达式完全匹配的交易,例如
t # 3-231, 1
u 0 1 2
u 0 2 2
感谢您的帮助!
Olha