• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

在命令行下使用perl

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

 

[email protected]  2
[email protected] 111
[email protected]   2222
[email protected]   1

 

类似这种输出,我想把他们变换成下面形式:

[email protected] 113
[email protected] 2223
就是将相同邮箱名称后面的数字相加。各位大侠能否给些思路如何用perl来实现。

答案:
perl -anle '$cnt{$F[0]}+=$F[1];END{print "$_\t$cnt{$_}" for keys %cnt}' urfile


如果熟悉了上面几个perl命令行参数的用法,上面的这个命令应该很好理解:
每次读取urfile的一行,由于使用了-a,打开自动分离 (split)模式. 空格是缺省的分离号. 输入根据分离号被分离然后放入缺省数组@F中,
以文件的第一行为例子$F[0] 就[email protected] , $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";
}
}


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Perl报错you may need to install the Win32::Console module(转)发布时间:2022-07-22
下一篇:
perl 调试命令发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap