在命令行下使用perl

http://blog.sina.com.cn/s/blog_4af3f0d20100g9oz.htmlhtml

 

aaa@domain.com  2
aaa@domain.com 111
bbb@home.com   2222
bbb@home.com   1數組

 

相似這種輸出,我想把他們變換成下面形式:

aaa@domain.com 113
bbb@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/perl
use strict;
use warnings;


my %hash;
while (<>){
      chomp;
     my @array=split;
     $hash{$array[0]} +=$array[1];
}

END{
foreach (keys %hash){
        print"$_\t$hash{$_}\n";
}
}
dom

相關文章
相關標籤/搜索