我正在解析如下格式的文本文件
> alpha
apple
airplane
art
> beta
bear
blue
beat
> charlie
cow
cent
coat
我正在尝试查找条目(alpha beta charlie
)有一个主题(例如“ta”)。如果找到主题,那么我会尝试打印出每个条目下面的单词(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/;
}
Usage: perl script.pl data.txt 'ta'
data.txt 中数据的输出:
> beta
bear
blue
beat
符号local $/ = '>'
将记录分隔符设置为>
而不是通常的\n
,所以每个>
标记已读取记录的开始。您搜索的行后面有一个空格>
,这就是积极的后视(?<=\x20)
尝试匹配。
您可以通过执行以下操作将输出重定向到文件:perl script.pl data.txt 'ta' >output.txt
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)