【问题标题】:Count how many times a word occurs in a file and email if word appears 5+ times如果单词出现 5 次以上,则计算一个单词在文件和电子邮件中出现的次数
【发布时间】:2016-06-29 01:24:13
【问题描述】:

我有一个 Perl 脚本,它计算文件中“坏”一词出现的次数,如果存在,它将发送电子邮件警报。

我试图让脚本仅在“坏”一词出现五次或更多时发送电子邮件,如果该词出现少于五次,则不执行任何操作。

我也在努力做到这一点,如果“坏”这个词出现五次或更多次,则在五次之后开始计算电子邮件警报。

例如,如果单词“bad”出现了 7 次,那么电子邮件警报会指出单词 bad 出现了 3 次(始终忽略文件中出现的前 5 次“bad”单词)。

输出文件示例

bad
bad
bad
bad
bad
bad
bad

由于“坏”一词出现了 7 次,因此应发出电子邮件警报,说明“坏”一词已被记录 3 次。

这是目前为止的代码:

#!/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 -- $!";
}

【问题讨论】:

  • 我认为当您说 exits 时,您的意思是 exists。我已编辑您的问题以使用 occurs,这是更好的英语,但 appears 也是可能的。如果您愿意,可以回滚我的编辑

标签: perl


【解决方案1】:

简单的解决方案是使用比较运算符

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

if 控制结构仅在其条件返回真值时执行。

【讨论】:

  • 你需要减去4,而不是5。 OP给出了73的例子(两次),所以我认为他们开始计算at 5(所以5==1)。
猜你喜欢
  • 2011-06-20
  • 2023-04-04
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
相关资源
最近更新 更多