Bem, se você for usar o perl, também pode ir até o fim.
O seguinte é uma maneira bastante imperfeita de contar o número de mensagens por domínio:
#!/usr/bin/perl
use strict;
my @mailq = 'cat /home/users/rilindo/mailq'; #Had to simulate the output of the mail command here. Change this to the actual mailq path, e.g. /usr/bin/mailq
my %domains = ();
foreach my $m (@mailq) {
$m =~ s/^\s+//;
$m =~ s/\s+$//;
$m =~ s/>//;
next if $m =~ /Queue/;
if ($m =~ /\d\d:\d\d:\d\d/) {
$domains{(split(/@/,$m))[1]}++;
}
else {
$domains{(split(/@/,$m))[1]}++;
}
}
foreach my $d (keys %domains) {
print $d . " has $domains{$d} message(s)" . "\n";
}
Essencialmente, enviamos uma saída do comando mailq para uma matriz e iteramos. Para cada registro na matriz, removemos os espaços e as linhas iniciais e finais e, em seguida, dividimos no sinal "@". Em seguida, inserimos o domínio como uma chave (se não existir) e, em seguida, o incrementamos em um hash. Na próxima tentativa, ele simplesmente incrementará o valor se o mesmo domínio for encontrado. A partir daí, passamos pelo hash e depois imprimimos o domínio com o número total de correspondências.
O resultado:
[rilindo@localhost ~]$ ./parsemail.pl
domain.com has 6 message(s)
domain3.com has 2 message(s)
domain1.com has 2 message(s)
Como eu disse, não é perfeito, mas faz o trabalho. Se nada mais, você terá uma idéia de onde ir a partir daqui.
A propósito, já que parece que você sabe perl, a revisão das estruturas de dados hash do Perl provará ser muito útil:Ou: