awk是一种强大的文本处理工具,用于对结构化文本进行处理和分析。它可以按照指定的字段进行分割,对每个字段进行操作,比如计算、打印等。
对于Linux三剑客的另外两个工具
(1)grep:用于在文件或文本流中搜索匹配某个模式的行,并将结果输出。它基于正则表达式进行高级搜索和匹配,是Linux系统中一种强大的文本搜索工具。
(2)sed:是一个流式文本编辑器,可以对文本进行行级别的编辑和转换。它支持正则表达式,并提供了替换、删除、插入等功能,常用于批量处理文本文件。
awk命令格式:awk [options] 'pattern action' filenames
1.awk内置变量
有9个基本内置变量:
(1)$0:整行记录
(2)$1~$n:当前记录的第几个字段
(3)FS:字段分隔符,默认为空格
(4)RS:记录分隔符,默认为换行符
(5)NF:当前行字段数量,即列数
(6)NR:已读出的记录数,即行号,以1开始,如读多个文件,NR是连续递增的。
(7)FNR:与NR类似,不同点在于FNR表示每个当前行在当前文件的行号,不同文件直接不是连续的。
(8)OFS:输出字段分隔符
(9)ORS:输出记录分隔符
分隔符支持正则表达式。
2.BEGIN和END模块
这两个模块定义在action中。
格式为:BEGIN {begin script} {process script} END {end script}
awk在开始处理输入文件之前会执行BEGIN模块,所以它是初始化FS(字段分隔符)变量、打印页眉或初始化其它在程序中以后会引用的全局变量的极佳位置。
awk在处理完输入文件之后会执行END模块,通常,END块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。
3.awk使用场景
以下是常用的使用场景。
3.1.统计TCP连接的状态
命令如下
netstat -ant|awk '/^tcp/ {++state[$NF]} END {for(key in state) print (key,state[key])}'