一道shell题,perl解法

简介:

题目:

一文件,内容如下

 
  1. zhangsan     80 
  2. lisi         81.5 
  3. wangwu       93 
  4. zhangsan     85 
  5. lisi         88 
  6. wangwu      97 
  7. zhangsan    90 
  8. lisi        92 
  9. wangwu      88 

要求:

 
  1. 要求输出格式:(average:平均成绩,total:总成绩) 
  2. name#######average#######total 
  3. zhangsan            xxx                        xxx 
  4. lisi                       xxx                        xxx 
  5. wangwu             xxx                        xxx 

这个题目都做烂了,原理么一样,上代码:

 
  1. #!/usr/bin/perl -w 
  2.  
  3. use strict; 
  4.  
  5. BEGIN { 
  6.        eval{ require List::Util; }; 
  7.        import List::Util qw/sum/ unless $@; 
  8.  
  9. my %name; 
  10.  
  11. open my $file,'<','a.txt' or die "$!\n"; 
  12.  
  13. while ( <$file> ) { 
  14.        chomp; 
  15.        my @array = split /\s+/; 
  16.        $name{$array[0]} = [] unless exists $name{$array[0]}; 
  17.        push @{$name{$array[0]}},$array[1]; 
  18.  
  19. close $file; 
  20.  
  21. print "name#######average#######total\n"; 
  22.  
  23. for my $name ( sort keys %name ) { 
  24.     my @tmp_array = @{$name{$name}}; 
  25.     print $name,"\t",sum(@tmp_array)/(scalar @tmp_array),"\t",sum(@tmp_array),"\n"; 

output:

 
  1. [root@Xen ~]# perl a.pl 
  2. name#######average#######total 
  3. lisi    87.1666666666667        261.5 
  4. wangwu  92.6666666666667        278 
  5. zhangsan        85      255 
本文转自dongfang_09859 51CTO博客,原文链接:http://blog.51cto.com/hellosa/593981,如需转载请自行联系原作者
相关文章
|
机器学习/深度学习 Unix Linux
bash shell 无法使用 perl 正则
今天跟大家分享一个关于正则表达式的案例
|
Shell Linux Perl
LINUX 常用替换命令三种方法(perl、shell、sed)
LINUX 常用替换命令三种方法(perl、shell、sed)
558 0
LINUX 常用替换命令三种方法(perl、shell、sed)
|
网络协议 Shell Perl
|
Shell Perl 虚拟化