本章你要掌握的内容如下:

1    awk的介绍

2    awk的基本用法

3    awk的变量

4    awk的格式化

5    awk的操作符

6    awk条件判断

7    awk的循坏

8    awk的数组

9    awk的函数

10   调用系统命令

一  awk的介绍:

大家最早听说awk的应该是在文本三剑客当中,那就是grep、sed、awk。但是awk可以说是里面最厉害的了,有人说你的linux学的有多麽的好,在awk当中都可以满足你,因为awk它是一门编程语言,它主要用于对文本和数据的扫描与处理,可以生成报告生成器,文本处理的格式化输出。awk有很多种版本,如:awk、nawk、mawk、gawk、MKS awk、take..  这其中有开源产品也有商业产品。

1.1   awk的工作原理:

awk  'BEGIN{commands}   pattern {commands}   END{commands}'

第一步:执行BEGIN{commands}语句块中的语句;

第二步:从文件或标准输入(stain)读取一行,然后执行pattern{commands}语句块,它逐行扫描,从第一行到最后一行重复这个过程,知道文件被完全读取。

第三步:当读到输入流末尾时,执行END{commands}语句块。

解释说明:

BEGIN语句块在awk开始从输入流中读取之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。

pattern语句块中的通用命令时最重要的部分,它也是可选的,如果没有提供pattern语句块,则是默认执行{print}。既打印每一个读取到的行,awk读取的每一行都会被执行该语句块。

END语句块在awk从输入流中读取完所有的行之后就被执行,比如打印所有行的 分析结果这类信息汇总都是在END语句块中完成,他也是一个可选的语句块。

1.2  awk的基本结构:

awk 'BEGIN{print "start"} pattern{commands} END{print "end"}'file

一个awk通常有BEGIN语句块、能够使用模式匹配的通用语句块、END语句块三部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中。

1.3   awk的模式和操作:

awk脚本是由模式和操作组成的。那什么是模式那,下面这些都是:

1 /正则表达式/:使用通配符的扩展集。

2 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。

3模式匹配表达式:用运算符~表示匹配和!~表示不匹配。

4 BEGIN语句块、pattern语句块、END语句块:

操作由一个或多个命令、函数、表达式组成,有如下这些:

1 变量和数组赋值

2 输出命令

3 内置函数

4控制流语句

1.4  awk命令格式和选项

语法形式:

AWK_awk

常用命令选项:

1 -F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:

2 -v var=value 赋值一个用户定义变量,将外部变量传给awk

3 -f scripfile 从脚本文件中读取awk命令

二  awk的基本用法

AWK_awk_02


AWK_awk_03

三   awk的变量:分为内置和自定义变量。

 内置的变量有下面这些:

  1. FS:输入字段分割符

  2. OFS:输出字段分隔符

  3. RS:输入记录分隔符,指定输入时的换行符,原来的行符仍有效

  4. ORS:输出记录分隔符,输出时用指定符号代替换行符

  5. NF:字段数量

  6. NR:行号

  7. FNR:各文件分别计数,行号

  8. FILENAME:命令行参数的个数

  9. ARGC命令行参数的个数

  10. ARGV:数组,保存的是命令行所给定的个参数

举例说明:

1 在a.txt中用“;”做分隔符,打印出第1行和第3行。

AWK_awk_04

2 ORS的使用方法

AWK_awk_05

3 NF的使用方法,在etc/passwd中列出字段数量,

AWK_awk_06

AWK_awk_07

4 NR的使用方法

AWK_awk_08

AWK_awk_09

5  FNR的用法

AWK_awk_10

AWK_awk_11

6  ARGV的用法

AWK_awk_12

AWK_awk_13

自定义变量

举例说明,注意这里面加“,”和不加的输出结果的区别

AWK_awk_14

AWK_awk_15

四  awk的格式化

print和printf的区别是什么:print能自动换行,只显示字符,printf不能自动换行,但是非常强大,可以指定格式,是个内部命令。

AWK_awk_16

格式符:

  1. %c: 显示字符的ASCII码

  2. %d,%i:显示十进制整数

  3. %e,%E:显示科学计数法数值

  4. %f:显示为浮点数

  5. %g,%G:以科学计数法或浮点形式显示数值

  6. %s:显示字符串

  7. %u:无符号整数

  8. %%:显示%自身

修饰符:

#[.#]:第一个数字控制显示的宽度;第二个#表示小数点后精度,#表示数字

-:左对齐(默认右对齐)

+:显示数值的正负符号

举例说明:

AWK_awk_17

操作符分为下面这些:

  1. 算数操作符

  2. 字符串操作符

  3. 赋值操作符

  4. 比较操作符

  5. 模式匹配符

  6. 逻辑操作符                  

一 算数操作符

AWK_awk_18


二 字符串操作符:没有符号的操作符,字符串链接。

如果你不理解可以看一下这个例子就明白了。

AWK_awk_19

三 赋值操作符

AWK_awk_20

四   比较操作符

  AWK_awk_21

举例说明请打印出奇偶数:

AWK_awk_22

解释说明:

因为"i=!i"中第一次i是空的,那非空就是真,所以输出第一行。第二次原本就是真的,非真就是假的空的。就不会输出显示。第三次是空。右边非空。所以是真的就会打印第三行,依次打印出奇数行。而在奇数前加一个非,就会显示偶数行。

举例说明:乘除算法

AWK_awk_23

大家先把这些上面的弄清楚弄明白吧,我写的比较多并且相对来说比较简单了,加些来的一篇博客会写下半部分内容,因为些博客是严谨的,不能随随便便写写就可以了,下半部分涉及到函数,内容相对来说比较难,前面这些比较简单,大家先看下,谢谢。

awk控制语句:if-else的用法

AWK_awk_24

awk控制语句while的用法:

条件为真,进入循坏,条件为假,退出循坏。

计算1加到100和为多少

AWK_awk_25

awk控制语句for的用法:

AWK_awk_26