强悍的awk

简介:

之前同事用perl写了个脚本来分析 数据

数据格式如下,文件有数百M

zhangsan     80
lisi         81.5
wangwu       93
zhangsan     85
lisi         88
wangwu      97
zhangsan    90
lisi        92
wangwu      88

计算每人的平均分和总分

cat test.pl

 #!/usr/bin/perl -w 

    use strict;

    BEGIN {
           eval{ require List::Util; };
           import List::Util qw/sum/ unless $@;
    }

    my %name;

    open my $file,'<','score2.txt' or die "$!\n";

    while ( <$file> ) {
           chomp;
           my @array = split /\s+/;
           $name{$array[0]} = [] unless exists $name{$array[0]};
           push @{$name{$array[0]}},$array[1];
    }

    close $file;

    print "name#######average#######total\n";

    for my $name ( sort keys %name ) {
        my @tmp_array = @{$name{$name}};
        print $name,"\t",sum(@tmp_array)/(scalar @tmp_array),"\t",sum(@tmp_array),"\n";
    }

 

 

接着是perl的完成需要的时间

name#######average#######total
lisi    87.1666666666667        201101083.5
wangwu  92.6666666666667        213790062
zhangsan        85      196102395

real    0m16.099s
user    0m15.379s
sys     0m0.713s

 

 

我写了awk 的完成时间

time awk ' BEGIN{printf "name\t\t avgscore\t\t\t sum \n"}name[$1]+=$2{};++num[$1]{};END{for( i in name) printf "%s\t\t|%-10f|\t\t|%.2f|\n", i,name[i]/num[i],name[i]}' score2.txt

name             avgscore                        sum 
zhangsan                |85.000000 |            |196102395.00|
lisi            |87.166667 |            |201101083.50|
wangwu          |92.666667 |            |213790062.00|

real    0m4.468s
user    0m4.402s
sys     0m0.063s

 

很给力的awk吧!





      本文转自hb_fukua  51CTO博客,原文链接:http://blog.51cto.com/2804976/609850,如需转载请自行联系原作者

相关文章
|
15天前
|
JSON 监控 数据处理
掌握AWK:文本处理的瑞士军刀
掌握AWK:文本处理的瑞士军刀
|
7天前
|
Unix Linux Shell
探索xargs的威力与应用
探索xargs的威力与应用
17 0
|
索引 Perl
文本处理利器——awk
文本处理利器——awk
103 0
|
Perl Shell
一分钟学awk够用(产品经理都懂了)
对不起,楼主欺骗了你,认真看完本文或许不止1分钟。不过,如果你真的认真阅读并超过了1分钟,相信你会有收获。
459 0
|
XML 数据格式 索引
awk高级玩法
1. 程序元素 一个awk 程序是一对以模式(pattern) 与大括号框起来的操作(action) 组合而成的,或许,还会加上实现操作细节的函数(function ) 。针对每个匹配于输人数据的模式,操作会被执行,且所有模式都会针对每条输人记录而检查。
1116 0
|
Perl 数据格式