gpt4 book ai didi

file - 如何在perl中的模式后提取一定数量的行?

转载 作者:行者123 更新时间:2023-12-03 18:40:18 24 4
gpt4 key购买 nike

假设我有一个文本文件:

Line 1
Line 2
Target Name1
Line 3
Line 4
Line 5
Line 6
Target Name2
Line 7
Line 8
Line 9
Line 10

我希望能够搜索目标模式(文本文件中可能有多个,如上例所示),然后打印出一定数量的跟随它的行。让我们说3行。那么我想要的输出是
Target Name1
Line 3
Line 4
Line 5

Target Name2
Line 7
Line 8
Line 9

到目前为止,我所拥有的只是查找目标并将其打印出来的代码:
use strict;
use warning;
open (my $INFILE, $input_file);
my $outfile = "output.txt";
open (my $OUTFILE, '>', $outfile);

my $name;

while (my $line = <$INFILE>) {
if ($line =~ m#TARGET\s+(\S+)#){
$name = $1;
print $OUTFILE "Target $name\n";
}
}

我不知道如何打印出 Target 后面的 3 行。注意:假设目标之间的距离始终大于 3 条线。我想我需要一个柜台吧?

最佳答案

一个基本的方法是使用标志和计数器来确定何时开始以及打印多少。单程:

use warnings;
use strict;

my $how_many = 3;

my $to_print = 0;
while (<>) {
$to_print = 1+$how_many if /Target\s+\S+/;

print if $to_print-- > 0;
}

这使用一个变量来控制操作,设置为每当看到“触发器”时要打印的行数(加一),然后每次打印都会倒计时。它做出了一些假设。

<> operator
从命令行(或从 STDIN )给出的文件中读取行,因此通过在调用时将文件名作为参数传递来运行脚本。

关于file - 如何在perl中的模式后提取一定数量的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60292669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com