perl的魅力

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
网上看到一道题,内容如下。
 
123456      23           1000
234567      34           1234
345678      21           1234
456789      45           4532
234567      34           1233
234567      34           1234
345678      21           3445
 
其中第一列为ID号  第二列为级别   第三列为时间
 
题目要求,写一个脚本处理文本,处理结果为
 
第一列显示ID
第二列过滤级别<30或者级别>40
第三列显示内容为,若为相同的ID号,计算时间之和

总觉得这个题目有点问题,数据有点不对应,不多说了,直接上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/env perl
# -*- coding: utf-8 -*-
 
use  strict;
 
my  %hash ;
 
while  (<DATA>) {
        chomp ;
        next  if  /^$|^ #/;
        my  @array  split ;
        if  ( $array [1] < 30 ||  $array [1] > 40) {
            push  @{ $hash { "$array[0]\t$array[1]\t" }}, $array [2];
        }
}
 
for  my  $num  ( sort  keys  %hash ) {
     my  @a  = @{ $hash { $num }};
     printf  "%d" , $num ;
     printf  sum(\ @a );
     printf  "\n" ;
}
 
sub  sum {
     my  ( $ref ) =  @_ ;
     my  $i  = 0;
     for  (@ $ref ) {
          $i  +=  $_ ;
     }
     return  $i ;
}
 
__DATA__
123456      23           1000
234567      34           1234
345678      21           1234
456789      45           4532
234567      34           1233
234567      34           1234
345678      21           3445

运行结果:

1
2
3
123456  23      1000
345678  21      4679
456789  45      4532


本文转自dongfang_09859 51CTO博客,原文链接:http://blog.51cto.com/hellosa/1554779,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值