используйте как этот скрипт.pl> outfile (или >> outfile для добавления)
здесь используются лексические файловые дескрипторы и 3 аргумента открытия, которые предпочтительнее глобальных файловых дескрипторов и 2 аргумента открытия.
#!/usr/bin/perl
use strict;
use warnings;
use English qw( -no_match_vars );
use Carp qw( croak );
my ( $fn, $line_num ) = @ARGV;
open ( my $in_fh, '<', "$fn" ) or croak "Can't open '$fn': $OS_ERROR";
while ( my $line = <$in_fh> ) {
if ( $INPUT_LINE_NUMBER == $line_num ) {
print "$line";
}
}
примечание: $ INPUT_LINE_NUMBER == $.
вот немного улучшенная версия, которая обрабатывает произвольное количество номеров строк и печатает в файл.
script.pl <infile> <outfile> <num1> <num2> <num3> ...
#!/usr/bin/perl
use strict;
use warnings;
use English qw( -no_match_vars );
use Carp qw( croak );
use List::MoreUtils qw( any );
my ( $ifn, $ofn, @line_nums ) = @ARGV;
open ( my $in_fh , '<', "$ifn" ) or croak "can't open '$ifn': $OS_ERROR";
open ( my $out_fh, '>', "$ofn" ) or croak "can't open '$ofn': $OS_ERROR";
while ( my $line = <$in_fh> ) {
if ( any { $INPUT_LINE_NUMBER eq $_ } @line_nums ) {
print { $out_fh } "$line";
}
}