我正在解析一个格式如下的文本文件
> alpha
apple
airplane
art
> beta
bear
blue
beat
> charlie
cow
cent
coat
我正在尝试查找具有主题(例如“ta”)的条目 (alpha beta charlie
)。如果找到主题,那么我将尝试打印出每个条目下方的单词(bear blue beat
)。
所以在这个例子中,我想要以下输出
> beta
bear
blue
beat
我已经知道如何打印输入行,但不知道如何打印下面的行。任何想法将不胜感激。
my $motif = "ta";
my $file = "file.pl";
open(INPUT, $file) or die "Can't open file.\n";
parse($motif);
sub parse{
my ($x) = (@_);
while(<INPUT>){
if($_ =~ />*($x)/){
print $_."\n";
# if($_ !~ />/){
# print $_."\n";
}else{
next;
}
}
}
最佳答案
这是另一种选择:
use strict;
use warnings;
my $motif = pop;
local $/ = '>'; # record separator
while (<>) {
chomp;
print $/ . $_ if /(?<=\x20).*?$motif/;
}
用法:perl script.pl data.txt 'ta'
在 data.txt 中输出数据:
> beta
bear
blue
beat
符号local $/ = '>'
将记录分隔符设置为 >
而不是通常的 \n
, 所以每个 >
标记已读取记录的开始。您搜索的行在 >
之后有一个空格,这就是正面回顾 (?<=\x20)
尝试匹配。
您可以通过执行以下操作将输出重定向到文件:perl script.pl data.txt 'ta' >output.txt
.
https://stackoverflow.com/questions/14846045/