2016-06-28 5 views
0

У меня есть сценарий Perl, который подсчитывает, сколько раз слово «плохо» выходит в файл, а если оно существует, оно отправит электронное письмо оповещения.Подсчитайте, сколько раз слово появляется в файле и отправляется по электронной почте, если появляется слово 5+ раз

Я пытаюсь получить сценарий для отправки электронной почты только в том случае, если слово «плохое» происходит пять или более раз и ничего не делать, если слово встречается менее пяти.

Я также пытаюсь сделать так, чтобы, если слово «плохое» происходит пять или более раз, запустите счет после пяти для оповещения по электронной почте.

Например, если слово «плохое» происходит семь раз, в уведомлении по электронной почте говорится, что слово «плохое» происходит три раза (всегда игнорируя первые пять раз, когда в файле происходит «плохое»).

Пример выходного файла

bad 
bad 
bad 
bad 
bad 
bad 
bad 

после слова «плохой» происходит в семь раз, оповещение по электронной почте должен выйти произнося слово «плохо» было записано три раза.

Вот код до сих пор:

#!/usr/bin/perl 

use strict; 

my $file = 'output.txt'; 
my $mark = 'bad'; 

open my $f, "<$file" or die "Error open file: $!\n"; 

my $counter = 0; 

while (my $line = <$f>) { 

    if ($line =~ /$mark/) { 
     $counter++; 
    } 
} 

if ($counter) { 

    my $body  = "Warning the word bad was recorded $counter times"; 
    my $cmd_email = "echo $body | mailx -s \"Alert error\" tneal01\@gmail.com"; 
    system($cmd_email) == 0 or die "Error sending email -- $!"; 
} 
+0

Я думаю, что если вы говорите * выходы * вы имеете в виду * существует *. Я редактировал ваш вопрос, чтобы использовать * происходит *, который лучше английский, но * появляется * также возможно. Вы можете отменить мое редактирование, если вы предпочитаете – Borodin

ответ

1

простым решением было бы использовать оператор сравнения

if ($counter > 5) { 
    $counter -= 5; 
    ........ 
    ....... 
} 

если структура управления выполняет только тогда, когда его состояние возвращает истинное значение.

+0

Вам нужно вычесть '4', а не' 5'. OP дает пример (дважды) '7' против' 3', поэтому я думаю, что они начинают считать _at_ '5' (так что это' == 1' для '5'). – zdim

Смежные вопросы