Пока у меня есть некоторый рабочий код, который входит в список серверов и выполняет некоторые регулярные выражения для получения данных из файла журнала. То, что я хочу сделать, это вывести состояние «НИЧЕГО ОТЧЕТА ДЛЯ ЭТОГО СЕРВЕРА», если нет данных для сбора из регулярного выражения на конкретном сервере.
Прямо сейчас он проходит через каждый сервер и, если данные соответствуют регулярному выражению, распечатывается.
Я добавил оператор else, чтобы распечатать вышеприведенный оператор, чтобы справиться с этим, но теперь он печатает его для каждого экземпляра, который не соответствует.
Вот копия вывода, как он работает сейчас ДО Я добавил изменение:
========================================================================
REPORTING SUMMARY for BACKUP SERVER : hostname1
========================================================================
REPORTING SUMMARY for BACKUP SERVER : hostname2
Mon Jul 05 00:30:02 2010: hostname2:backup:INFO: backup-date=20100705003002
Mon Jul 05 00:30:02 2010: hostname2:backup:INFO: host=hostname2
Mon Jul 05 00:55:25 2010: hostname2:backup:INFO: backup-size=49.75 GB
Mon Jul 05 00:55:25 2010: hostname2:backup:INFO: backup-time=00:25:23
Mon Jul 05 00:55:25 2010: hostname2:backup:INFO: backup-status=Backup succeeded
========================================================================
Вот копия вывода сейчас, ПОСЛЕ Я добавил «НИЧЕГО, ЧТОБЫ ОТЧЕТИТЬ ЗА ЭТУ ДАТУ»: (внутри цикла while). По сути, он печатает это утверждение каждый раз, когда оно не совпадает. Я действительно хочу, чтобы это дало мне одно заявление.
========================================================================
REPORTING SUMMARY for BACKUP SERVER : hostname1
NOTHING TO REPORT FOR THIS DATE...
NOTHING TO REPORT FOR THIS DATE...
NOTHING TO REPORT FOR THIS DATE...
...
...
========================================================================
NOTHING TO REPORT FOR THIS DATE...
Mon Jul 05 00:30:02 2010: hostname2:backup:INFO: backup-date=20100705003002
Mon Jul 05 00:30:02 2010: hostname2:backup:INFO: host=hostname2
NOTHING TO REPORT FOR THIS DATE...
NOTHING TO REPORT FOR THIS DATE...
Mon Jul 05 00:55:25 2010: hostname2:backup:INFO: backup-size=49.75 GB
Mon Jul 05 00:55:25 2010: hostname2:backup:INFO: backup-time=00:25:23
Mon Jul 05 00:55:25 2010: hostname2:backup:INFO: backup-status=Backup succeeded
Вот код:
# Usage: ./test.pl Ju1 05 2010 <logfilepath> hostname1 hostname2 hostname3
use strict;
use warnings;
my($mon,$day,$year,$file) = @ARGV;
splice(@ARGV, 0, 4, ());
foreach my $server ( @ARGV ) {
print "========================================================================\n";
print "REPORTING SUMMARY for BACKUP SERVER : $server\n";
open(my $fh,"ssh $server cat $file |") or die "can't open log $server:$file: $!\n";
while (my $line = <$fh>) {
if ($line =~ m/.* $mon $day \d{2}:\d{2}:\d{2} $year:.*(host=|ERROR:|backup-date=|backup-size=|backup-time=|backup-status)/) {
print $line;
# adding else statement here
} else {
print "NOTHING TO REPORT FOR THIS DATE... \n";
}
}
close($fh);
}