标签: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
本文出自 “BSDerの-专注于开源领域” 博客,请务必保留此出处http://hellosa.blog.51cto.com/2698675/1554779
标签:perl
原文地址:http://hellosa.blog.51cto.com/2698675/1554779