Как прочитать n строк над соответствующей строкой в ​​Perl? - PullRequest
4 голосов
/ 17 февраля 2012

Скажите, у меня есть файл xx.txt, и он содержит данные

1 I am here

2 to work in 

3 Perl for writing

4 a script for 

5 myself

Предположим, я хочу найти строковый скрипт и хочу отобразить три строки над ним, что мне делать?

1 Ответ

8 голосов
/ 17 февраля 2012

Вы можете использовать массив в качестве буфера печати. ​​

my @array;
while (<DATA>) {
    push @array, $_;
    shift @array if @array > 4;
    print @array if /script/;
}


__DATA__
1 I am here
2 to work in 
3 Perl for writing
4 a script for 
5 myself

Различное использование:

Если вы намереваетесь использовать это как отдельное устройство, вы можете вместо этого использовать grep:

grep -B3 script xx.txt

Или perl one-liner, если grep не вариант (например, вы в Windows):

perl -nwe 'push @a, $_; shift @a if @a > 4; print @a if /script/' xx.txt

Если это внутри скрипта, вам нужно только указать свой собственный дескриптор файла:

my @array;
open my $fh, '<', "xx.txt" or die $!

while (<$fh>) {
    push @array, $_;
    shift @array if @array > 4;
    print @array if /script/;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...