Вот еще Перла решение:
my ($firstline, $lastline) = (1000,2000);
open my $fh, '<', 'sample.txt' or die "$!";
while(<$fh>){
print if $. == $firstline .. $. == $lastline;
}
, если вы не используете переменные в другом месте, вы можете использовать special use case of ..
с константами (4-й пункт, если вы используете постоянное выражение они автоматически по сравнению с $.
):
while(<$fh>){
print if 1000 .. 2000;
}
Здесь важно часть от perldoc для оператора ..
:
В скалярном контексте «..» возвращает логическое значение. Оператор бистабилен, как триггер, и эмулирует линейный (запятая) оператор sed, awk и различных редакторов.
Редактировать По желанию, с хранением промежуточных строк в переменной.
my ($firstline, $lastline) = (1000,2000);
my $output = '';
open my $fh, '<', 'sample.txt' or die $!;
while(<$fh>){
$output .= $_ if $. == $firstline .. $. == $lastline;
}
print $ouput;
Кроме того, если ваш файл не является слишком большим (он подходит полностью в памяти), вы также можете прочитать его в списке и выберите строки вы заинтересованы в:
my $output = join '', (<$fh>)[$firstline+1..$lastline]
Приятно узнать о операторе диапазона Perl .. –
@ Hâkon: ссылка, которую я предоставил, является страницей perldoc для (почти всех) операторов. '~' Двоичный обратный упоминается только в таблице приоритетов. Идеома '=() =', хотя и не является строго оператором, но иногда полезен, там не упоминается (полезно, если вы хотите, чтобы какое-то выражение оценивалось в контексте списка, но интересуется только размером результата). –
Спасибо за решение. Могу ли я написать результат команды печати переменной perl. – Reddy