我一直在爲此奮鬥了幾天,似乎無法弄清楚。Perl - 如何計算和打印電子郵件地址數組中域的出現次數?
我有一個通過push(@emails,$email)
在一個while循環中創建的電子郵件地址數組。
我正在嘗試創建數組中每個出現計數爲的唯一域的列表。
按發生次數排序。
所以,如果陣列@emails
有:
[email protected] [email protected] [email protected] [email protected]
我可以打印:
yadoo.com 2
geemail.net 1
zoohoo.org 1
我發現基於文件中的電子郵件,但,路在我頭上這個例子。有人可以幫助我一個更詳細的代碼示例,可用於一組電子郵件地址?
perl -e 'while(<>){chomp;/^[^@][email protected]([^@]+)$/;$h{$1}++;}
foreach $k (sort { $h{$b} <=> $h{$a} } keys %h) {print $h{$k}." ".$k."\n";} infile
我也試過:(更多我的缺乏理解)
foreach my $domain (sort keys %$domains) {
print "$domain"."=";
print $domains->{$domain}."\n";
};
和
my %countdoms;
$countdoms{$_}++ for @domains;
print "$_ $countdoms{$_}\n" for keys %countdoms;
我有很多不同的嘗試最好的結果是總計數(這是1812(準確計數),旁邊有一個數字2,我很接近,可能嗎?
P.S.我在上面的兩個例子中首先將域分割出來,例如:'$ domain = split('\ @',$ email);推(@域,$域);'在一個循環,但是,需要完整的例子,包括如果需要分裂,以避免更多的混淆我... – Stephayne 2011-05-11 13:58:33