http://blog.sina.com.cn/s/blog_4af3f0d20100g9oz.html
aaa@domain.com2aaa@domain.com 111bbb@home.com2222bbb@home.com1
類似這種輸出,我想把他們變換成下面形式:aaa@domain.com 113bbb@home.com 2223就是將相同郵箱名稱后面的數字相加。各位大俠能否給些思路如何用perl來實現。答案:perl -anle '$cnt{$F[0]}+=$F[1];END{PRint "$_/t$cnt{$_}" for keys %cnt}' urfile如果熟悉了上面幾個perl命令行參數的用法,上面的這個命令應該很好理解:每次讀取urfile的一行,由于使用了-a,打開自動分離 (split)模式. 空格是缺省的分離號. 輸入根據分離號被分離然后放入缺省數組@F中,以文件的第一行為例子$F[0] 就是 aaa@domain.com , $F[1] 就是2$cnt{$F[0]} +=$F[1] 就是一個哈希數組, 以$F[0]為key,$F[1]為value,把相同key的數值都疊加起來.然后把文件的每一行都這樣處理一次.END{} 就是在循環完之后再處理.里面的意思就是打印這個%cnt 哈希數組.這個哈希數組的key就是 郵箱名稱,value就是疊加后的數字.下面的是上面行命令的文本形式:#!/usr/bin/perluse strict;use warnings;my %hash;while (<>){chomp;my @array=split;$hash{$array[0]} +=$array[1];}END{foreach (keys %hash){print"$_/t$hash{$_}/n";}}
新聞熱點
疑難解答