result.txt 第一列是RTX 第2列的是等级 第3行是在线时间
要求
1.第一列显示RTX
2.列出相同RTX的总在线时间
3.列出等级<=30 ,>=50的RTX号
5723997 30 301011144
1721922 43 201022114
3423993 58 401011144
5723997 34 244011144
1273997 13 545101114
求解最后显示格式要这个一样
我的答案:
#!/usr/bin/perl
use strict;
use warnings;
my @rec;
my %rtx;
while (<DATA>)
{
my @r = split;
if ( $r[1] <= 30 || $r[1] >= 50)
{
push @rec ,\@r;
}
}
foreach (@rec)
{
$rtx{$_->[0]}->{level} = $_->[1];
$rtx{$_->[0]}->{time} += $_->[2];
}
foreach my $no (keys %rtx )
{
print "$no\t$rtx{$no}->{level}\t$rtx{$no}->{time}\n";
}
__DATA__
5723997 30 301011144
5723997 31 301011144
1721922 43 201022114
3423993 58 401011144
5723997 34 244011144
1273997 13 545101114
3423993 58 401011144
|
另一位大牛写的相对简单的代码:
my %hash;
while (<>) {
my ($id,$level,$time)=split;
$hash{$id}{$time}+=$time;
}
foreach my $id (kyes %hash) {
print "$id $hash{$id}{$level} $hash{$id}{time}\n" if $hash{$id}{$level} ge 30 and $hash{$id}{$level} le 50 ;
}
如果只是取RTX,grep最好了
|
我的改正:
use strict;
use warnings;
my %hash;
while (<DATA>)
{
my ($id,$level,$time)=split;
# 在这里把不需要的数据清出去,不做过多的处理
next if ($level > 30 && $level < 50);
$hash{$id}{time}+=$time;
$hash{$id}{level}+=$level;
}
foreach my $id (kyes %hash)
{
print "$id $hash{$id}{level} $hash{$id}{time}\n";
}
__DATA__
5723997 30 301011144
5723997 31 301011144
1721922 43 201022114
3423993 58 401011144
5723997 34 244011144
1273997 13 545101114
3423993 58 401011144
|
如有不正确的地方,欢迎指正!!!!
阅读(1091) | 评论(0) | 转发(0) |