網上看到一道題,內容如下。 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