zoukankan      html  css  js  c++  java
  • AWK学习笔记

    一、AWK基本介绍

        AWK,它的名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母,有的地方说AWK是AWK是一种优良的文本处理工具 ,但它更是一个小型的编程语言,广泛应用LINUX环境中,帮助我们进行流控制、数学运算、进程控制语句甚至于内置的变量和函数。它可以做的事情很多,像任何其它语言如C、C++、JAVA一样,你可以用它来做你想做的任何事情,这取决于你能够想到把它用来干什么。我们可以用它来创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表等等功能,它有着像C及JAVA一样的语言格式,因而对于C及JAVA语言的开发者来说,要熟悉AWK那是非常容易的,需要做的就是记一些它特定的命令而已。

        AWK的功能太强大了,不可能用简单的语言来中概括,我这里简单的说明一下它的语言结构,以及后面我会使用一个简单的统计示例来说明它的使用。

        语法结构:

       

    1. awk  
    2. 'BEGIN  
    3. {  
    4.     #定义及预处理  
    5. }  
    6. {  
    7.     #处理代码,这里根据输入做处理,如果输入是多行的会做循环处理  
    8. }  
    9. END  
    10. {  
    11.     #结果输出  
    12. }'  

        以下说明一下这种结构:

        1、awk为命令;

        2、在BEGIN块的第一个花括号"{}"中,可以定义一些变量或者做一些预处理,以便我们在后面可以使用这些变量,在这里定义的变量是作为全局变量使用的,并且这里执行的动作是在第一个输入行读入之前进行的,也就是说在处理输入内容时,首先执行的是这里的逻辑代码;

        3、第二个花括号"{}"中,用于对输入内容的处理,因为awk是输入,如果没在输入操作行,它将什么也不能够做(除了上面提到的第一个花括号"{}"中逻辑,因为上面的动行是在输入之前进行的操作),如果有多条输入行,那这里将对每个输入行做循环的处理;

        4、END的花括号"{}"中,我们可以对花括号"{}"中执行的结果逻辑,进行再处理,如将统计结果求平均等操作。

     

    二、AWK语法结构介绍

        上面有提到AWK是一种编程语言,那它肯定有自己的逻辑处理结构,和C、JAVA语言非常相似,你如果是C、JAVA的开发者,保你一看就会,看下面的关系符介绍和流程控制语句吧。

        1、关系操作符和布尔操作符:

       

    操作符

    描述

    <

    小于

    >

    大于

    <=

    小于等于

    >=

    大于等于

    ==

    等于

    !=

    不等于

        上面的都看着很眼熟吧!

        2、IF条件判断:

        语法格式:

       

    1. if(expression){  
    2.     action1  
    3. }else{  
    4.     action2  
    5. }  

        多IF判断:

       

    1. if(expression1){  
    2.     action1  
    3. }else if(expression2){  
    4.     action2  
    5. }else{  
    6.     action3  
    7. }  

        简单示例:

       

    1. if(a<100){  
    2.     b=1  
    3. }else if(a>=100 && a<1000){  
    4.     b=2  
    5. }else{  
    6.     b=3  
    7. }  

        2、条件操作符:

        语法格式:

        

    1. expr ? action1 : action2  

        简单示例:

       

    1. grade = (avg>=60) ? "pass":"fail"  

        3、WHILE循环:

        语法格式:

       

    1. while(condition){  
    2.     action  
    3. }  
    4. 或者  
    5. do{  
    6.     action  
    7. while(condition)  

        简单示例:

       

    1. BEGIN{  
    2.     while(x<4){  
    3.         print x  
    4.         x++  
    5.     }  
    6. }  
    7. 或  
    8. BEGIN{  
    9.     do{  
    10.         print x  
    11.         x++  
    12.     }while(x<4)  
    13. }  

        4、FOR循环:

        语法格式:

       

    1. for(first; end; increment){  
    2.     action  
    3. }  

        简单示例:

       

    1. for(x=1;x<4;x++){  
    2.     print x  
    3. }  

        怎么样,很眼熟吧,呵,这就是AWK的语法结构。

     

    三、简单示例

        这里举一个非常简单的示例,就是将你机器上运行着的JAVA进行的PID给加起来,然后求平均输出,看以下的示例代码:

        1、先通过JPS查看本机的JAVA进程,以便后面验证是否正确:

       

    1. $ jps  
    2. 4088   
    3. 14134   
    4. 5325 Main  
    5. 6324 Jps  

        通过编写简单的AWK脚本:

       

    1. jps|awk '  
    2. BEGIN{pid=0;pidnum=0}  
    3. {  
    4. pid=pid+$1;  
    5. pidnum=pidnum+1  
    6. }  
    7. END{print "average pid:" pid/pidnum}'  

        可以得到如下结果:

        average pid:7499.25

        当然上面的命令是可以不换行编写的:

       

    1. jps|awk 'BEGIN{pid=0;pidnum=0}{pid=pid+$1;pidnum=pidnum+1}END{print "average pid:" pid/pidnum}'  

        这个示例到这里也就演示完了,做这样的统计确实是一点意义都没有,但是如果你有一个用户访问的COOKIE记录文件,并且每条访问记录都有记录响应时间,你觉得你能够用上面的示例做一些什么呢?我们不要的是结果,要的是如何去使用,至少如何使用,就看我们自己有什么样的需求了,这不是AWK所能够决定的了。

     

    四、总结

        这里只是简单的介绍了一下AWK的语法结构及简单示例,还有很多强大的功能,这个就需要我们大家一起去发掘了,这篇文章只是适合像我这样的初级用户,如果你是初次接触AWK,那就凑合着看吧。

    作者:xiaoxibo 发表于2011-8-31 1:59:13 原文链接
    阅读:6 评论:0 查看评论
  • 相关阅读:
    iOS基础
    iOS基础 ----- 内存管理
    NSAttributedString 的一些基本用法
    node安装使用
    docker常用命令
    docker lnmp
    easy-wechat
    composer
    center7系统搭建lnmp
    xammp环境配置
  • 原文地址:https://www.cnblogs.com/xiaoxibo/p/2212609.html
Copyright © 2011-2022 走看看