标签: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