Perl:如果操作系统启动了连续的两行,则解析文件并连接字符串



我必须解析一个UniProt文件,如下所示:

ID   001R_FRG3G              Reviewed;         256 AA.
AC   ERPL_ADA;
OS   Frog virus 3 (isolate Goorha) (FV-3).
ID   002L_FRG3G              Reviewed;         320 AA.
AC   Q6GZX3;
OS   Frog virus 3 (isolate Goorha) (FV-3 / ADD / PERM /
OS   strain HB).

等等

我想检索所有的操作系统标识符(物种(,但情况是其中一些具有唯一的操作系统,而另一些具有连续行中的重复操作系统,我应该将其连接起来。

因此输出为:

OS Frog virus 3 (isolate Goorha) (FV-3).
OS Frog virus 3 (isolate Goorha) (FV-3 / ADD / PERM / strain HB).

对于一个操作系统,我可以使用regexp选择行,如:

while ($line=<IN>){
chomp $line; 
if ($line=~ /^OSs{3}/ and $line=~ /.$/){
$os= $line;
}
}

但是当你有两个连续的操作系统时该怎么办呢?我一直在尝试添加下一个,但无法找到解决方案。

my @species;
while (1) {
my $line = <$IN>;
if (defined($line)) {
chomp($line);
my @fields = split(' ', $_, 2);
if ($fields[0] eq 'OS') {
push @species, $fields[2];
}
}
if (@species) {
say join ' ', @species;
@species = ();
}
last if !defined($line);
}

最新更新