在这里,我们正在研究客户可以使用的通讯系统。作为一名实习生,我的一项工作就是帮助拼图的小部分。在这种情况下,我需要做的是扫描电子邮件服务器的日志以获取退回的邮件,并将电子邮件和电子邮件被退回的原因添加到“错误的电子邮件数据库”中。如何在列表中拆分管道分隔的字符串?
坏邮件表有两列:“电子邮件”和“理性” 我用下面的语句来从日志中的信息,并将其发送到Perl脚本
grep " 550 " /var/log/exim/main.log | awk '{print $5 "|" $23 " " $24 " " $25 " " $26 " " $27 " " $28 " " $29 " " $30 " " $31 " " $32 " " $33}' | perl /devl/bademails/getbademails.pl
如果你有sugestions关于更高效的awk脚本,那么我也很乐意听到这些脚本,但我的主要焦点是Perl脚本。 awk管道“[email protected]|反弹”给Perl脚本。我想要接受这些字符串,将它们分割为|并将这两个不同的部分放入数据库中各自的列中。这是我有什么:
#!usr/bin/perl
use strict;
use warnings;
use DBI;
my $dbpath = "dbi:mysql:database=system;host=localhost:3306";
my $dbh = DBI->connect($dbpath, "root", "******")
or die "Can't open database: $DBI::errstr";
while(<STDIN>) {
my $line = $_;
my @list = # ? this is where i am confused
for (my($i) = 0; $i < 1; $i++)
{
if (defined($list[$i]))
{
my @val = split('|', $list[$i]);
print "Email: $val[0]\n";
print "Reason: $val[1]";
my $sth = $dbh->prepare(qq{INSERT INTO bademails VALUES('$val[0]', '$val[1]')});
$sth->execute();
$sth->finish();
}
}
}
exit 0;
你不需要grep和awk。如果您只能提供/var/log/exim/main.log内容的示例,我们可以更好地帮助您构建一个执行grep和awk所做任何事情的perl脚本。 – bmdhacks 2008-10-02 22:26:49
我认为用Perl编写整个代码会更好。你可能会看到速度提升,因为Perl必须重新编译每行代码。 – 2009-01-08 02:41:46