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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章