Как читать из файла и делать grep в Perl? - PullRequest
3 голосов
/ 26 августа 2010
open(MR, "<path_to_report");
$rid;

Файл может быть очень большого размера .Внутри него есть уникальная строка в следующем формате

Root identifier: <some number>

например

Root identifier: 12987

Мне нужно извлечь 12987 в $rid.

Какя могу сделать это в Perl?

Ответы [ 6 ]

4 голосов
/ 26 августа 2010

Вот еще один способ сделать это, используя более современные идиомы:

use warnings;
use strict;

open my $file, '<', 'path_to_report'   # 3 arg open is safer
     or die "could not open file: $!"; # checking for errors is good

my $rid;
while (<$file>) {
    last if defined( ($rid) = /Root identifier: (\d+)/ );
}

close $file;

if (defined $rid) {
    # do something with $rid
}
1 голос
/ 26 августа 2010
while(<MR>) {
    chomp;
    ($rid) = $_ =~ m/Root identifier: (\d+)/;
    last if defined $rid;
}
0 голосов
/ 26 августа 2010

Я бы использовал что-то вроде этого:

#!/usr/bin/perl

use 5.010;

open(MR, "<", file) or die "cannot open file";
while(<MR>) {
    last if(/^Root identifier: (\d+)$/ig);
}

say($1);

P.S .: Вы также можете использовать:

last if(/^Root identifier: (\d+)$/ig) while(<MR>);
0 голосов
/ 26 августа 2010

Следующее найдет номер и оставит его в $rid

open(MR, "<path_to_report");
while(<MR>) {
   chomp;
   next unless /Root identifier:\s*[0-9]+\s*$/;
   tr/\D//g;
   $rid = $_;
}

Вы не указали точное количество или тип пробела между ':' и числом или после числаЯ включаю \s* до и после цифр, чтобы учесть переменную сумму.

0 голосов
/ 26 августа 2010
    #!/usr/bin/perl
    use strict;
    use warning;
    open(IN, '<', file) or die $!;
    read(IN, my $data, -s file);
    $rid =~ $data = m/Root identifier: (\d+)/;
    print"$rid";
    close(IN);
0 голосов
/ 26 августа 2010

Читайте по одной строке за раз, используя оператор <>, и используйте регулярные выражения Perl, чтобы найти и извлечь то, что вам нужно. Если вы находитесь в среде, подобной Unix, проверьте man perlre для ссылки на регулярные выражения Perl.

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