zoukankan      html  css  js  c++  java
  • awk神器

     
     
      产品经理(PM)过来找你要最近某某的数据,而你知道这些数据目前只能通过日志文件去分析,因为我们知道,我们不可能把所有数据都放入db中(这不科学啊!)。每当有这样任务的时候,你就用php或java(又或c)写一个特殊任务的程序,这真是一件令人头痛的事情。
     
     
      
      
    放入db???
     

      为什么我不建议把数据放入db中呢?优点不言自明,我们可以通过sql语句很容易把数据拿出来。

      缺点呢?首先就是我们不能把什么东西都往db里放?

      原因,我归纳了以下几点:
      1、数据的抽风型:
        一般都是某某(不敢指明点姓,怕打击报复)脑门子一拍,突然想要某些数据,这就会来找你要。等这股抽风劲一过,很长时间没人再找你要数据了。
      2、数据的臃肿型:
        与其说是臃肿还不如说是乱七八糟。你不能把那一坨一坨的杂七杂八的数据,一股脑放入db中吧?那你的后台db成什么样子了?所以我们要管好我们的后院,不能什么东西都放到家里面。
      3、成本:
        干什么事情,我们不能做赔本的买卖。像这种一次性的买卖,我们就要降低成本去做。
     
      为了解决以上问题,我们请出awk神器吧?一种“短小精悍”的神器,常常用一两行代码就能搞定一些复杂的任务。
     
     
     

    本文宗旨
     
      awk不难,关键是看我们怎么思考?我的思考方式是:在这么多数据行中,我要找什么(行位置)?找到之后,我们要干什么(如{})?
      故我的主题就出来了:找什么和干什么。我不想讲什么语法之类的东西(不要在意这些细节)。
     
     
     

    找什么?
     
       这个世界最难的不是做什么,而是找什么?李清照的“寻寻觅觅”,最后把自己寻觅没了。仿古人,俺也寻寻觅觅了一阵子,结果跟清照大姐一样,迷失在寻寻觅觅中,到现在都不知道我在寻觅什么?——个人认为找什么不是体力活,而是技术活。awk吸引我的,也就是它教会了我怎么找我想要的东西?
     
     准备干粮
      
    cat  netstat.txt 
    Proto Recv-Q Send-Q Local-Address          Foreign-Address             State
    tcp        0      0 0.0.0.0:3306           0.0.0.0:*                   LISTEN
    tcp        1      1 0.0.0.0:80             0.0.0.0:*                   LISTEN
    tcp        0      0 127.0.0.1:9000         0.0.0.0:*                   LISTEN
    tcp        0      0 yuedu.com:80        124.205.5.146:18245         TIME_WAIT
    tcp        0      0 yuedu.com:80        61.140.101.185:37538        FIN_WAIT2
    tcp        0      0 yuedu.com:80        110.194.134.189:1032        ESTABLISHED
    tcp        0      0 yuedu.com:80        123.169.124.111:49809       ESTABLISHED
    tcp        0      0 yuedu.com:80        116.234.127.77:11502        FIN_WAIT2
    tcp        0      0 yuedu.com:80        123.169.124.111:49829       ESTABLISHED
    tcp        0      0 yuedu.com:80        183.60.215.36:36970         TIME_WAIT
    tcp        0   4166 yuedu.com:80        61.148.242.38:30901         ESTABLISHED
    tcp        0      1 yuedu.com:80        124.152.181.209:26825       FIN_WAIT1
    tcp        0      0 yuedu.com:80        110.194.134.189:4796        ESTABLISHED
    tcp        0      0 yuedu.com:80        183.60.212.163:51082        TIME_WAIT
    tcp        0      1 yuedu.com:80        208.115.113.92:50601        LAST_ACK
    tcp        0      0 yuedu.com:80        123.169.124.111:49840       ESTABLISHED
    tcp        0      0 yuedu.com:80        117.136.20.85:50025         FIN_WAIT2
    tcp        0      0 :::22                  :::*                        LISTEN
     
     上小菜(基础条件匹配):

     查询所有tcp中,接受队列非0的网络包。

    localhost:zhoubc Guest$ awk '$1 =="tcp" && $2 > 0' netstat.txt 
    tcp        1      1 0.0.0.0:80             0.0.0.0:*                   LISTEN

     打印出来的内容,我们不知所云。如果把第一行打出来,就一目了然了。这时候我们要用到awk的全局常量(如果想知道AWK的全局常量,我们可以往下看,附录,我把常用的罗列出来了)NR。

    localhost:zhoubc Guest$ awk 'NR==1 || $1 =="tcp" && $2 > 0' netstat.txt 
    Proto Recv-Q Send-Q Local-Address          Foreign-Address             State
    tcp        1      1 0.0.0.0:80             0.0.0.0:*                   LISTEN

    看爽了是不是?

    推荐
     
     
     
    参考资料
     
    不错的博客文章:
    http://bbs.linuxtone.org/thread-24441-1-1.html
    手册:http://www.gnu.org/software/gawk/manual/gawk.html
     
  • 相关阅读:
    POJ 1659 Frogs' Neighborhood
    zoj 2913 Bus Pass(BFS)
    ZOJ 1008 Gnome Tetravex(DFS)
    POJ 1562 Oil Deposits (DFS)
    zoj 2165 Red and Black (DFs)poj 1979
    hdu 3954 Level up
    sgu 249 Matrix
    hdu 4417 Super Mario
    SPOJ (BNUOJ) LCM Sum
    hdu 2665 Kth number 划分树
  • 原文地址:https://www.cnblogs.com/baochuan/p/3833130.html
Copyright © 2011-2022 走看看