awk文本处理利器
awk是一种功能强大的数据处理工具,本身可以称为一种程序设计语言,因而具有其他程序设计语言所共同拥有的一些特征,
例如变量、函数、以及表达式等。通过awk,用户可以编写一些非常实用的文本处理工具。
awk的设计使得它非常适合于处理由行和列组成的文本数据。
---------------------------------------------------------------------------------------------------
[root@localhost ~]# cat scores.txt
John 85 92 79 87
Nancy 89 90 73 82
Tom 81 88 92 81
Kity 79 65 83 90
Han 92 89 80 83
Kon 88 76 85 97
//执行awk程序的几种方式:
[root@localhost ~]# awk '{print}' scores.txt //通过命令行执行awk程序
John 85 92 79 87
Nancy 89 90 73 82
Tom 81 88 92 81
Kity 79 65 83 90
Han 92 89 80 83
Kon 88 76 85 97
[root@localhost ~]# cat >test.awk //执行awk脚本
{print}
[root@localhost ~]# chmod +x test.awk
[root@localhost ~]# awk -f test.awk scores.txt
John 85 92 79 87
Nancy 89 90 73 82
Tom 81 88 92 81
Kity 79 65 83 90
Han 92 89 80 83
Kon 88 76 85 97
[root@localhost ~]# cat >test.sh //可执行脚本文件
#!/bin/awk -f
{print}
[root@localhost ~]# chmod +x test.sh
[root@localhost ~]# ./test.sh scores.txt
John 85 92 79 87
Nancy 89 90 73 82
Tom 81 88 92 81
Kity 79 65 83 90
Han 92 89 80 83
Kon 88 76 85 97
//awk的模式匹配:
系统内置变量:
$0:记录变量,表示当前正在处理的记录
$n:字段变量,其中n为整数,且大于1.表示第n个字段的值
NF:整数值,表示当前记录(变量$0所代表的记录)的字段数
NR:整数值,表示awk已经读入的记录数
FILENAM:表示正在处理的数据文件的名称
FS:字段分隔字符,默认值是空格或者是制表符
RS:记录分隔符,默认值是换行符
[root@localhost ~]# awk '$2 > 90 {print}' scores.txt //关系表达式;第2列超过90的行显示
Han 92 89 80 83
[root@localhost ~]# awk '/^T/ {print}' scores.txt //正则表达式;筛选以T开头的文本行显示
Tom 81 88 92 81
[root@localhost ~]# awk '/^(T|K)/ {print}' scores.txt //或 的关系筛选
Tom 81 88 92 81
Kity 79 65 83 90
Kon 88 76 85 97
[root@localhost ~]# awk '/^(Tom|K)/ {print}' scores.txt //
Tom 81 88 92 81
Kity 79 65 83 90
Kon 88 76 85 97
[root@localhost ~]# awk '/^K/ && $2 > 80 {print}' scores.txt //混合模式;可以将正则表达式和关系表达式混合在一起
Kon 88 76 85 97
[root@localhost ~]# awk '/^Nancy/,$2 == 92 {print}' scores.txt //区间模式;利用其可以匹配一段连续的文本行,本例结合正则表达式和关系表达式来匹配前后两个模式在内的文本行之间的所有的行,注意边界!
Nancy 89 90 73 82
Tom 81 88 92 81
Kity 79 65 83 90
Han 92 89 80 83
BEGIN模式:
一种特殊的内置模式,成立的时机为awk程序刚开始执行但是又尚未读取任何数据之前。
因此该模式对应的操作仅仅被执行一次,当awk读取数据之后,BEGIN模式便不再成立。
故可将与数据文件无关的,而且在整个程序的生命周期中,只需执行一次的代码放在BEGIN模式对应的操作中。
END模式:
awk的另一种特殊模式,成立时机与BEGIN模式相反,是在awk命令处理完成所有的数据,即将退出程序时成立,在此之前,END模式并不成立。
[root@localhost ~]# ./test1.sh
the report is about students's scores.
[root@localhost ~]# cat test1.sh //
#!/bin/awk -f
BEGIN {
FS="[\t:]"
RS="\n"
count=30
print "the report is about students's scores."
}

//变量:
三、变量
1.变量的定义和引用

2.系统内置变量
$0:记录变量,表示当前正在处理的记录
$n:字段变量,其中n为整数,且大于1.表示第n个字段的值
NF:整数值,表示当前记录(变量$0所代表的记录)的字段数
NR:整数值,表示awk已经读入的记录数
FILENAM:表示正在处理的数据文件的名称
FS:字段分隔字符,默认值是空格或者是制表符
RS:记录分隔符,默认值是换行符
3.记录分隔符和字段分隔符



4.记录和字段的引用


四、运算符和表达式
1.算术运算符

2.赋值运算符

3.条件运算符

4.逻辑运算符

5.关系运算符

awk的程序与shell的交互
1.通过管道实现与shell的交互

2.通过system函数实现与shell的交互

浙公网安备 33010602011771号