AWK 来自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描,过滤,为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其它的功能。
平时主要用来处理文本,将文本按照指定的格式输出。其中包含了变量,循环以及数组。
sed命令常用于一整行的处理。而awk比较倾向于将一行分成多个 “ 字段 ” 然后再进行处理。
awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。
在使用awk命令的过程中,可以使用逻辑操作符。(&&“表示"与”、“||表示"或”、"!“表示非”;还可以进行简单的数学运算,如+、一、*、/、%、^分别表示加、减、乘、除、取余和乘方。)
awk 用于”比较规范“的文本处理,用于统计指定内容的数量并输出字段。
sed 将不规范或无规则的文本,处理成相对”比较规范“的文本。
格式1: awk '{pattern + action}' filenames //awk [选项] '匹配规则和处理规则 ' [处理文本路径]格式2: awk -f 脚本文件 filenames

它的匹配规则主要是:正则表达式
处理规则主要是:
-F参数:指定分隔符,可指定一个或多个
print 后面做字符串的拼接
awk -F":" '{ print $1 }' /etc/passwd

awk -F":" '{ print $1 $3 }' /etc/passwd

awk -F":" '{ print $1 " " $3 }' /etc/passwd

awk -F":" '{ print "username: " $1 "\t\tuid:" $3" }' /etc/passwd

BEGIN 和 END 模块
通常,对于每个输入行, awk 都会执行每个脚本代码块一次。然而,在许多编程情况中,可能需要在 awk 开始处理输入文件中的文本之前执行初始化代码。对于这种情况, awk 允许您定义一个 BEGIN 块。
因为 awk 在开始处理输入文件之前会执行 BEGIN 块,因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它在程序中以后会引用的全局变量的极佳位置。
awk 还提供了另一个特殊块,叫作 END 块。 awk 在处理了输入文件中的所有行之后执行这个块。通常, END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。
小结:
逐行执行开始之前执行什么任务,结束之后再执行什么任务,用BEGIN、END。
BEGIN:一般用来做初始化操作,仅在读取数据记录之前执行一次。
END:一般用来做汇总操作,仅在读取完数据记录之后执行一次。

准备文件fyydlz.txt的文本如下(可以利用touch命令和vi命令组合创建):
这里是最常用的几个操作例子:
1、打印“开始”,打印每行,打印“结束”:
awk 'BEGIN{ print "开始" } { print } END{ print "结束" }' fyydlz.txt

2、打印每行的行号:
awk '{print NR}' fyydlz.txt

3、打印每行的文本:
awk '{print $0}' fyydlz.txt

4、打印每行的第1列(默认用空格分离):
awk '{print $1}' fyydlz.txt

5、打印每行的最后1列(默认用空格分离):
awk '{print $NF}' fyydlz.txt

6、打印每行的倒数第2列(默认用空格分离):
awk '{print $(NF-1)}' fyydlz.txt

7、打印每行,并为每行带上行号:
awk '{print NR":",$0}' fyydlz.txt
8、打印含有序号的行:
awk '/\d./ {print}' fyydlz.txt
