Perl: учитывая текстовый файл, я должен сохранить в матрице только те строки текста, которые содержат определенное слово - PullRequest
0 голосов
/ 09 ноября 2019

Я использую скрипт, который сохраняет HTML-страницу в текстовый файл. Внутри этого текстового файла у меня есть несколько строк. Я хотел бы сохранить некоторые из них в матрице (2 xn), которую я буду использовать в будущем для заполнения таблицы postgres.

файл содержит много повторений этих 4 строк:

ExitNode 0011BD2485AD45D984EC4159C88FC066E5E3300E
Published 2019-11-09 02:20:53
LastStatus 2019-11-09 03:02:54
ExitAddress 162.247.74.201 2019-11-09 03:03:21

Я хотел бы сохранить в матрице Ip и дату для каждого ExitAddress, который я нахожу в файле

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

Я не уверен, что правильно понял вашу проблему, но в любом случае мое решение будет выглядеть следующим образом

use strict;
use warnings;

use Data::Dumper;

my $debug = 0;

my @data;

while( <DATA> ) {
    if( $_ =~ /ExitAddress\s+(\S+)\s+(\S+)\s+(\S+)/ ) {
        my($ip,$date,$time) = ($1,$2,$3);
        printf "IP: %15s DATE: %10s TIME: %8s\n", 
                     $ip, $date, $time if $debug;
        push @data , [$ip,$date,$time];
    }
}

print Dumper(\@data) if $debug;

foreach my $e (@data) {
    printf "%15s %10s %8s\n", @{$e};
}

__DATA__
ExitNode 0011BD2485AD45D984EC4159C88FC066E5E3300E
Published 2019-11-09 02:20:53
LastStatus 2019-11-09 03:02:54
ExitAddress 162.247.74.201 2019-11-09 03:03:21

ExitNode 0011BD2485AD45D984EC4159C87FC066E5E6F01A
Published 2019-11-09 03:40:12
LastStatus 2019-11-09 04:7:48
ExitAddress 162.247.74.167 2019-11-09 04:08:03
0 голосов
/ 09 ноября 2019

Попробуйте это:

use feature qw(say);
use strict;
use warnings;

my $fn = 'file.txt';
open ( my $fh, '<', $fn ) or die "Could not open file '$fn': $!";
my @ip;
my @date;
while( my $line = <$fh> ) {
    chomp $line;
    if  ($line =~ /ExitAddress\s+(\S+)\s+(\S+)/) {
        push @ip, $1;
        push @date, $2;
    }
}
close $fh;
...