网上看到一道题,内容如下。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