产品经理(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.0.0:* LISTEN
tcp 0.0.0.0: 0.0.0.0:* LISTEN
tcp 127.0.0.1: 0.0.0.0:* LISTEN
tcp yuedu.com: 124.205.5.146: TIME_WAIT
tcp yuedu.com: 61.140.101.185: FIN_WAIT2
tcp yuedu.com: 110.194.134.189: ESTABLISHED
tcp yuedu.com: 123.169.124.111: ESTABLISHED
tcp yuedu.com: 116.234.127.77: FIN_WAIT2
tcp yuedu.com: 123.169.124.111: ESTABLISHED
tcp yuedu.com: 183.60.215.36: TIME_WAIT
tcp yuedu.com: 61.148.242.38: ESTABLISHED
tcp yuedu.com: 124.152.181.209: FIN_WAIT1
tcp yuedu.com: 110.194.134.189: ESTABLISHED
tcp yuedu.com: 183.60.212.163: TIME_WAIT
tcp yuedu.com: 208.115.113.92: LAST_ACK
tcp yuedu.com: 123.169.124.111: ESTABLISHED
tcp yuedu.com: 117.136.20.85: FIN_WAIT2
tcp ::: :::* LISTEN

 上小菜(基础条件匹配):

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

localhost:zhoubc Guest$ awk '$1 =="tcp" && $2 > 0' netstat.txt
tcp 0.0.0.0: 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 0.0.0.0: 0.0.0.0:* LISTEN

看爽了是不是?

推荐
 
 

参考资料
 
不错的博客文章:
http://bbs.linuxtone.org/thread-24441-1-1.html
手册:http://www.gnu.org/software/gawk/manual/gawk.html
 

awk神器的更多相关文章

  1. 【实习记】2014-09-24万事达卡bin查询项目总结

            8月28号,接到这个问题:现有前缀查询速度较慢,改进此知值求区间问题. 一开始没想到用二分法,更没有想到这个项目用了一个月,这一个月里,我学习并使用了middle框架写出了server ...

  2. 【转】AWK 简明教程

    本文转自:http://coolshell.cn/articles/9070.html 有一些网友看了前两天的<Linux下应该知道的技巧>希望我能教教他们用awk和sed,所以,出现了这 ...

  3. AWK 简明教程

    AWK 简明教程 转自:http://coolshell.cn/articles/9070.html 有一些网友看了前两天的<Linux下应该知道的技巧>希望我能教教他们用awk和sed, ...

  4. 正则、grep、sed、awk

    每次用到正则都要蛋疼一下,索性总结一下在这里. 正则 正則表達式主要分为基础正则和扩展正则.注意,正则和一般命令行输入的命令的通配符不同.正则仅仅使用于支持这样的表示法的工具,如:vi,grep,se ...

  5. bedtools神器 | gtf转bed | bed文件运算

    我们生信技能书有一篇介绍bedtools的文章,可以在微信里搜着看下,非常有用. http://bedtools.readthedocs.io/en/latest/ gtf转bed用Linux命令完全 ...

  6. awk如何向shell传值

    今天写脚本,遇到awk脚本向shell传参的情况,上网谷歌一下,发现都有些麻烦,通过管道,通过eval,感觉都很复杂.于是想到用read来试一下. 首先构造一个测试文件test.txt,里面的内容是1 ...

  7. awk和sed (十二)

    [教程主题]:4.awk和sed [主要内容] [1]awk AWK是贝尔实验室1977年搞出来的文本出现神器.之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberg ...

  8. 十三、jdk命令之Java内存之本地内存分析神器:NMT 和 pmap

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  9. awk 统计

    命令太多,记不住,组合起来用一把…..示例文件: 1 2 3 4 5 6 7 8 9 10 11 [root@lovedan test]# cat a.txt hello good world hel ...

随机推荐

  1. jQuery实战

    1.获取标签在文档中的位置 var left = $('.selected').offset().left; var top = $('.selected').offset().top; 2.获取选中 ...

  2. 2016 ACM/ICPC Asia Regional Dalian Online 1008 Function 二分+RMQ

    Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...

  3. DelphiXE10.1获取Administrator所有权的方法

    操作: 菜单选择Proceject->Options->Application->把Enable Admonistrator Privileges打勾(manifest file - ...

  4. shixi

    1. ./statsite -f statsite.conf &(后台): 2. ps ax|grep ** 3. bg fg 4.chmod +x start.sh 5.tcpdump ud ...

  5. 16-1-27---JDBC复习(01)

    JDBC数据库连接学习    用jdbc连接数据库    1.加载驱动        Class.forName("");        用注册的方式会使内存中存在两个对象,而用上 ...

  6. iOS tableview自定义cell上添加按钮实现删除功能

    在删除的时候,先删除数据源,再删除cell 但是,会发现一直崩: numberOfRowsInSection 解决方案:

  7. ViewController的生命周期

    # ViewController 的生命周期 # ViewController的生命周期中各个方法的流程如下: init loadView :加载view viewDidLoad :view加载完毕 ...

  8. DoD and DoR

    Definition of Ready User Story is defined Acceptance criteria(functional and non-functional requirem ...

  9. 【Python】引用计数

    一.概述 要保持追踪内存中的对象,Python使用了引用计数这一简单的技术. 二.引用计数的增减 2.1 增加引用计数 当对象被创建并(将其引用)赋值给变量时,该对象的引用计数被设置为1. 对象的引用 ...

  10. Hadoop.2.x_常用端口及定义方法(转)

    组件   节点 默认端口 配置 用途说明 HDFS DataNode 50010 dfs.datanode.address datanode服务端口,用于数据传输 HDFS DataNode 5007 ...