• 在命令行下使用perl


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

    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 "$_ $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"$_ $hash{$_} ";
    }
    }

  • 相关阅读:
    内核开发特点
    制作 patch
    sdram flash 区别
    数组名 函数名
    Html标签见解——关于position问题分组总结
    Html标签见解——margin和padding使用过程中所谓的bug问题《一》
    HTML标签见解——img
    关于float和clear
    业内杂谈——你认识“用户体验”吗?
    css控制窗口上下水平居中方案详解
  • 原文地址:https://www.cnblogs.com/hurner/p/3768371.html
Copyright © 2020-2023  润新知