perl的魅力

网上看到一道题,内容如下。

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号,计算时间之和

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

#!/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

运行结果:

123456  23      1000
345678  21      4679
456789  45      4532


你可能感兴趣的:(perl)