perl 语言中的AWK之基础篇
一 :AWK与perl
 
  
  1. 1. Perl,我们并不陌生了到目前为止,它在web编程中的强大作用,对于每个web开发者而言,重要性不言而喻,
  2. 由于perl借取了C、sed、awk、shell scripting以及很多其他程序语言的特性。
  3. 其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。
  4. 简而言之,Perl 象C一样强大,象awk、sed等脚本描述语言一样方便,由此看来在perl语言中,AWK占据着重要的一席之地。
  5. 这里我们不去重点的说perl语句而是介绍一下其重要的组成部分AWK的基础内容,
  6. 下面我们就来揭开perl中的awk的神秘面纱吧! 
二:AWK简介
 
  
  1. what is awk? 对于初学者来说这是个模式的代名词,其实awk是三位创造者Aho、Weinberger和Kernighan统称,
  2. 简单的来说AWK 是一种用于处理文本的编程语言工具  
  3. wk可以做些什么?由于其可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。
  4. 它具备了一个完整的语言所应具有的几乎所有精美特性,所以其三位创建者已将它正式定义为“样式扫描和处理语言”。
  5. 它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。  
三: AWK处理文本的流程:
 
  
  1. awk在处理文件时,首先扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。
  2. 如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行 
四: AWK的使用
 
  
  1. AWK的 语法格式:  
  2. Awk [options] ‘scritpts’  filename  
  3.  或者awk [options] ‘partern [actions] ’ filename  
  4. [options]:  
  5. -F: 指定awk 处理文本的行时的分隔符
 例如 

 
  
  1. 常用的awk内置的三个变量 OFS  FS  NF   
  2. -FS 指定字段分隔符
  3. 例如  
 
  
  1. Awk  -v FS=: ‘{print $2}’ /etc/passwd  

 
  
  1. -v OFS= 定义awk 输出时的字符分隔符 
  2. 例如: Awk –v OFS=# ‘{print $1,$2}’ /etc/passwd

 
  
  1. 注:上例中的在输入$1和$2,$1,$2的形式是分别输出$1和$2. $1 $2的形式是将$1和$2合并后输出  
  2. 如  

 
  
  1.  NF 表示awk处理一行时的字段总数  
  2.  例如:输出一行的最后一个字段  
  3. Awk ‘{print $NF}’ /etc/passwd 

 
  
  1. 注:显示一行的倒数第三个字段   

 
  
  1. printf 的使用  
  2. 格式:printf format item1,item2,……  
  3.  注意:  
  4. 1:与print命令的最大不同是,printf 需要指定format  
  5. 2:format用于指定后面的每个item的输出格式  
  6. 3:printf语句不会自动打印换行符 \n  
  7. 4:format格式的指示符都以%开头,后跟一个字符  
  8. format:  
  9. %c :显示字符的ASCII码  
  10. %d,%i :显示字符的十进制整数  
  11. %e,$E 科学计数法显示数值  
  12. %f :显示浮点数  
  13. %g ,%G :以科学计数法的格式或者浮点数的格式显示数值  
  14. %s  显示字符串  
  15. %u  显示无符号整数  
  16. %% 显示%自身  
  17. 另外format 还可以添加修饰符  
  18. N:显示宽度  
  19. -:左对齐  
  20. +:显示数值符号  
  21. 例如: 

 
  
  1. Awk 中使用 输出重定向  
  2. print items > output-file  
  3. print items >> output-file  
  4. print items | command   
awk的操作符: 
 
  
  1. 算术操作符:  
  2. -x: 负值  
  3. +x: 转换为数值;  
  4. x^y:   
  5. x**y: 次方  
  6. x*y: 乘法  
  7. x/y:除法  
  8. x+y:  
  9. x-y:  
  10. x%y:  
  11. 字符串操作符:  
  12. 只有一个,而且不用写出来,用于实现字符串连接;  
  13. 赋值操作符:  
  14. =  
  15. +=  
  16. -=  
  17. *=  
  18. /=  
  19. %=  
  20. ^=  
  21. **=  
  22. ++  
  23. --  
  24. 需要注意的是,如果某模式为=号,此时使用/=/可能会有语法错误,应以/[=]/替代;  
  25. 布尔值 
  26. awk中,任何非0值或非空字符串都为真,反之就为假  
 
  
  1.  比较操作符:  
  2. < y       True if x is less than y.   
  3. <= y  True if x is less than or equal to y.   
  4. > y       True if x is greater than y.   
  5. >= y  True if x is greater than or equal to y.   
  6. x == y  True if x is equal to y.   
  7. x != y  True if x is not equal to y.   
  8. x ~ y      True if the string x matches the regexp denoted by y.   
  9. x !~ y  True if the string x does not match the regexp denoted by y.   
  10. subscript in array    True if the array array has an element with the subscript subscript  
  11.  表达式间的逻辑关系符:  
  12.  &&  
  13. || 
  14. 条件表达式:  
  15. selector?if-true-exp:if-false-exp  
  16.  selector :条件表达式  
  17.  if-true-exp:statement  
  18.  if-false-exp: statement  
  • 下面我们来重点说说awk的模式使用
 
  
  1. awk的模式:  
  2. awk [options] ‘parten’ ‘print ….’ filename  
  3. parten:  
  4. 1:正则表达式 格式为/regular expression/  
  5. 2: 表达式  其值非0或者非空字符时满足的条件  例如:$1 ~ /user/ 或者 $1 == ‘user’  
  6. 用运算符~(匹配)和 ~ !(不匹配)  
  7. 例如: 

 
  
  1. 指匹配范围格式为pat1,pat2 (pat代表模式)同sed用法  
  2.  BEGIN/END 特殊格式   
  3.    BEGIN :在awk执行动作之前的处理动作  
  4.     让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量  
  5.  END:在awk 执行动作完成后执行的动作  
  6.     让用户在最后一条输入记录被读取之后发生的动作  
  7. 例如: 
  8. Awk –F:’$NF ~/bash/ {print “username bash” ;printf “%-10s %s\n,$1,$NF”}’ /etc /passwd

 空模式是指 :匹配所有行
由于篇幅限制字数限制不能全部介绍,如有错误,还望多多指正,多多讨论,谢谢。下篇 将继续awk的循环控制语句的使用,