LINUX.ORG.RU

разбор dhcp.leases (продолжение)


0

0

оригинал далеко ушел, вот и решил опять написать.

open(LOG,"/var/state/dhcp/dhcpd.leases") or die $!;

while(<LOG>) { chomp;

if ( /^lease/ ) { $ip = (split( / /, $_))[1] ;} if ( /^ starts/ ) { $starts = (split( / /, $_))[4] ;} if ( /^ ends/ ) { $ends = (split( / /, $_))[4] ;} if ( /^ hardware ethernet/ ) { $mac = (split( / /, $_))[4] ;} if ( /^ client-hostname/ ) { $name = (split( / /, $_))[3] ;}

print "$ip $starts $ends $mac $name\n"; } close(LOG);

почему-то он по несколько раз (раз по 12) выводит одну и ту же строку, причем только в первых двух строчках правельное совпадение полей, а в остальных случаях берет с соседних полей лога или мак или айпишку. Вообще запутался:(

anonymous

ты вот выкинул хэши ( $mac{$ip} и тп) из того примера, что я давал,
вот и лови глюки :)
хинт: заполни в цикле while(<LOG>) все хэши, закрой лог и потом:
foreach $key (sort keys %mac) {
print "$mac{$key} $name{key} .... \n"; }

sasha999 ★★★★
()
Ответ на: комментарий от sasha999

PS: найди O'Reilly Perl Bookshelf и почитай - очень поможет.

sasha999 ★★★★
()
Ответ на: комментарий от sasha999

точно - я и правда убил {$ip} - помогло, но выводит по 12 раз каждую строку (как раз сктолько же, сколько строк для каждого клиента)

сделал:

foreach $key (sort keys %name)
{
print "$mac{$key} $name{$key} $ip{$key}    $starts{$key} - $ends{$key}  \n";
}

все хорошо, но $ip{key} не выводится.

ЗЫЖ// про совет про книгу - спасибо - попробую найти

 

anonymous
()
Ответ на: комментарий от sasha999

Все - Огромное спасибо! Работает!!!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.