($line =~ /(\d+)%\s+\/var\s+(\d+).*?(\d+)%\s+Interleaved\s+.*?avm\s+.*?fre\s+.*?cs\s+.*?us\s+.*?sy\s+.*?id\s+.*?(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\w+)/i)
####
$line =~ /(\d+)%\s+\/var\s+(\d+).*?(\d+)%\s+Interleaved\s+.*?avm\s+.*?fre\s+.*?cs\s+.*?us\s+.*?sy\s+.*?id\s+.*?(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+.*?(\d\d):(\d\d):(\d\d)/i
print "$device $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12\n";
####
use strict;
use warnings;
my @devices;
while( my $line = ){
next unless $line =~ /^\s*logging to (\w+) is ([0-9.]+) . . ./;
my %device = (
name => $1,
ip => $2,
partitions => [],
);
do { $line = ; } until $line =~ /\S/;
while( $line =~ /^(\d+)%\s+(\S+)/ ){
push @{$device{partitions}}, { name => $2, pct_used => $1 };
$line = ;
}
warn "Expected 'disks faults' line" unless $line =~ /disks faults/;
$line = ;
chomp($line);
warn "Expected 'avm fre cs us sy id' line" unless $line =~ /avm fre cs us sy id/;
my @cols = split ' ', $line;
warn "wrong number of columns" unless scalar(@cols)==6;
$line = ;
chomp($line);
warn "Expected numbers on '$line'" unless $line =~ /(\d+ ){5}\d+/ && $line !~ /[^0-9 ]/;
my @vals = split ' ', $line;
warn "wrong number of values" unless scalar(@vals)==6;
@{$device{attributes}}{ @cols } = @vals;
$line = ;
chomp $line;
warn "Expected device name on '$line'" unless $line eq $device{name};
$line = ;
chomp $line;
if( $line =~ /(\d\d):(\d\d):(\d\d)/ ){
@{$device{date}}{ qw/hour minute second/ } = ( $1, $2, $3 );
}else{
warn "Couldn't parse date line: '$line'";
}
push @devices, \%device;
}
use Data::Dumper;
print Dumper \@devices;
exit;
__DATA__
logging to device1 is 2.3.5.1 . . .
56% /var
38% /
31% Interleaved
disks faults
avm fre cs us sy id
504956 19880 32 3 24 72
device1
Tue Sep 9 11:26:44 ist 2005
logging to device2 is 2.3.5.1 . . .
96% /var
88% /
100% Interleaved
disks faults
avm fre cs us sy id
5049 198 32 3 24 72
device2
Tue Sep 5 10:26:44 GMT 2005