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 查看评论
原文地址:https://www.cnblogs.com/xiaoxibo/p/2212609.html