Прочитать последнюю строку файла с данными в Perl - PullRequest
5 голосов
/ 29 марта 2012

У меня есть текстовый файл для анализа в Perl, я анализирую его с начала файла и получаю необходимые данные.

После всего этого я хочу прочитать последнюю строку в файлес данными.Проблема в том, что последние две строки пустые.Итак, как мне получить последнюю строку, содержащую какие-либо данные.

Ответы [ 5 ]

8 голосов
/ 29 марта 2012

Если файл относительно короткий, просто прочитайте, откуда вы закончили получать данные, оставив последнюю непустую строку:

use autodie ':io';
open(my $fh, '<', 'file_to_read.txt');
# get the data that is needed, then:
my $last_non_blank_line;
while (my $line = readline $fh) {
    # choose one of the following two lines, depending what you meant
    if ( $line =~ /\S/ ) { $last_non_blank_line = $line }  # line isn't all whitespace
    # if ( line !~ /^$/ ) { $last_non_blank_line = $line } # line has no characters before the newline
}

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

my $backwards = File::ReadBackwards->new( 'file_to_read.txt' );
my $last_non_blank_line;
do {
    $last_non_blank_line = $backwards->readline;
} until ! defined $last_non_blank_line || $last_non_blank_line =~ /\S/;
4 голосов
/ 29 марта 2012
perl -e 'while (<>) { if ($_) {$last = $_;} } print $last;' < my_file.txt
2 голосов
/ 04 августа 2013

Вы можете использовать модуль File :: ReadBackwards следующим образом:

use File::ReadBackwards ;
$bw = File::ReadBackwards->new('filepath') or
    die "can't read file";
while( defined( $log_line = $bw->readline ) ) {
    print $log_line ;
    exit 0;
}

Если они не заполнены, просто проверьте $log_line на совпадение с \n;

0 голосов
/ 18 ноября 2014

Вот мой вариант решения Perl для командной строки:

perl -ne 'END {print $last} $last= $_ if /\S/' file.txt
0 голосов
/ 29 марта 2012

Если файл маленький, я бы сохранил его в массиве и прочитал с конца. Если оно большое, используйте модуль File :: ReadBackwards.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...