1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
网上看到一道题,内容如下。
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号,计算时间之和
|
总觉得这个题目有点问题,数据有点不对应,不多说了,直接上代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#!/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
|
运行结果:
1
2
3
|
123456 23 1000
345678 21 4679
456789 45 4532
|
本文转自dongfang_09859 51CTO博客,原文链接:http://blog.51cto.com/hellosa/1554779,如需转载请自行联系原作者