首页 > linux > awk 最大值,最小值 字符串转数字
2009十一月9

awk 最大值,最小值 字符串转数字

马上就要用awk来分析一些日志,所以今天继续恶补。书上的例子看了就懂,有些飘飘然。然而真正动手却发现不是那么回事。看来好记性不如烂笔头,有些东西记下来比较好。

举个最简单的例子吧,用awk求一列的最大值和最小值。按照书中的要求来写出内容。其中最让人恶心的大概就是这个字符串转数字了。

Mike Harrington:(510) 548-1278:250:100:175
Christian Dobbins:(408) 538-2358:155:90:201
Susan Dalsass:(206) 654-6279:250:60:50
Archie McNichol:(206) 548-1348:250:100:175
Jody Savage:(206) 548-1278:15:188:150
Guy Quigley:(916) 343-6410:250:100:175
Dan Savage:(406) 298-7744:450:300:275
Nancy McNeil:(206) 548-1278:250:80:75
John Goldenrod:(916) 348-4278:250:100:175
Chet Main:(510) 548-5258:50:95:135
Tom Savage:(408) 926-3456:250:168:200
Elizabeth Stachelin:(916) 440-1763:175:75:300

将该数据按格式输出,写如下awk命令文件

BEGIN{
    FS="[:]";    
    print "                       ***CAMPAIGN 1998 CONTRIBUTIONS***                   \n";
    print "---------------------------------------------------------------------------\n";
    printf "%-20s\t%22s\t%8s\t%8s\t%8s\t%8s\t\n","NAME","PHONE","Jan  |","  Feb|","Mar  |","TotalDonated";
    print "---------------------------------------------------------------------------\n";
}
{
    if( NR == 1) {
        min = $3+0;
        max = $5+0;
    } else {
        if( ($3+0) < min ) { min = $3+0 }
        if( ($5+0) > max ) { max = $5+0 }
    }

    $6 = $3+$4+$5;
    total += $6;
    printf "%-25s\t%22s\t%8s\t%6.2f\t%6.2f\t%6.2f\t\n",$1,$2,$3,$4,$5,$6;    
}
END{
    avg = total/NR;    
    print "--------------------------------------------\n";
    print "                 SUMMARY                    \n";
    printf "The campaign received a total of $%6.2 for this quarter.\n",total;
    printf "The everage donation for the "NR" contribuors was $%6.2f\n",avg;
    printf "The highest contribution was $%6.2f\n",max;
    printf "The lowest contribution was $%6.2f\n",min;
}

如果min = $3+0; max = $5+0;这里不写上这个+0的话,得出的最大值最小值是按字符串方式比较的。(这个我现在也不敢肯定了,不过至少在我的服务器环境下面是这样的,我怀疑和我拷贝过去的原数据文件格式有关,可能在最后一列后面多出空格之类的东西)

现结果如下:

awk_min_max

awk_min_max

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/11/09/1621/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

9 Responses to “awk 最大值,最小值 字符串转数字”

  1. #1 Jutoy 回复 | 引用 Post:2009-11-09 17:56

    呃,技术贴,来打酱油坐个沙发~~

    [回复]

  2. #2 Rubinz 回复 | 引用 Post:2009-11-09 20:43

    有点深奥 ~

    [回复]

  3. #3 老饕 回复 | 引用 Post:2009-11-09 21:54

    awk~~都没听过~囧~

    [回复]

  4. #4 关山老人 回复 | 引用 Post:2009-11-09 21:55

    看不懂啊!不知道老兄什么时候叫我一下啊!

    [回复]

  5. #5 掌柜的马甲 回复 | 引用 Post:2009-11-10 08:20

    还就没来了,占个前排~

    [回复]

  6. #6 young001 回复 | 引用 Post:2009-11-10 13:26

    shell编程,处理数据库用?

    [回复]

  7. #7 simaopig 回复 | 引用 Post:2009-11-10 14:37

    @young001
    分析日志。从日志里面获取想要的数据,不影响线上服务响应速度。嗯。

    [回复]

  8. #8 young001 回复 | 引用 Post:2009-11-10 14:45

    @simaopig 回复真效率,呵呵

    [回复]

  9. #9 simaopig 回复 | 引用 Post:2009-11-10 14:46

    @young001
    呃。刚才没时间回。呵呵。。

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)