网上看到一道题,内容如下。123456      23           1000234567      34           1234345678      21           1234456789      45           4532234567      34           1233234567      34           1234345678      21           3445其中第一列为ID号  第二列为级别   第三列为时间题目要求,写一个脚本处理文本,处理结果为第一列显示ID第二列过滤级别<30或者级别>40第三列显示内容为,若为相同的ID号,计算时间之和

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

#!/bin/env perl# -*- coding: utf-8 -*-use strict;my %hash;while () {       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           1000234567      34           1234345678      21           1234456789      45           4532234567      34           1233234567      34           1234345678      21           3445

运行结果:

123456  23      1000345678  21      4679456789  45      4532