在命令行下使用perl

王朝学院·作者佚名  2016-05-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

在命令行下使用perlhttp://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";}}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航