awk工作原理

awk是一个用于格式化文本输出的报告生成器,主要用于处理和分析文档,尤其适用于日志信息。在CentOS7中,awk是gawk的软链接。awk通过逐行处理文本,使用字段分隔符切割文本,其基本语法包括三种格式。awk的工作原理涉及BEGIN和END语句块,以及pattern语句块,其中BEGIN在处理文件前执行,END在处理完所有行后执行。内置变量如FS、NR、NF等在awk中起到关键作用,同时支持自定义变量声明和使用。
摘要由CSDN通过智能技术生成


一、初识awk

(一)什么是awk?

awk,全称:Aho Weinberger Kernighan
是一个报告生成器,用于格式化文本输出

(二)awk能做什么?

1、主要功能:格式化显示文档、或者打印报表
2、将给定的文本内容按照工程师想要的格式输出显示、或者打印成报表格式
3、日常用途:处理各种文档(比如日志信息),从中分析挖掘出工程师关心的必要数据,并且打印成报表

(三)CentOS7系统中的awk

1、gawk

在CentOS7(或者CentOS6)系统中,使用GNU项目组开发的gawk来实现awk的功能

Gawk is the GNU Project’s implementation of the AWK programming language.

2、awk是一个软链接,指向gawk

$ ll /usr/bin/awk

软链接:/usr/bin/awk
真身:/usr/bin/gawk

STDOUT:
lrwxrwxrwx. 1 root 4 Mar 28 01:54 /usr/bin/awk -> gawk

(四)awk的基本语法

1、第一种语法格式

awk  [options]  'program'  var=VALUE  /PATH/TO/SOMEFILE...

(1)options:选项
(2)program:程序,使用awk语言,用单引号 ” 引起来
相对比较复杂,需要根据生产需求的逻辑关系编写awk程序代码,从而实现特定功能

2、第二种语法格式

awk  [options]  -f  programFile  var=VALUE  /PATH/TO/SOMEFILE...

(1)-f programFile:将逻辑复杂的awk程序代码放在programFile程序文件中,用 -f 调用awk程序文件

3、第三种语法格式

awk  [options]  'BEGIN{
   action;...}pattern{action;...}END{
   action;...}'  /PATH/TO/SOMEFILE...

(五)awk处理机制

1、逐行处理

(1)会在内存中开辟一块awk处理文本的内存空间
(2)每一次读入文件中的一行文本到内存空间进行处理
(4)自带循环:处理完第一行并输出,然后再读入第二行,以此类推

2、切割字段

(1)可以根据指定的分隔符,把读入的一行文本切割成若干的字段
(2)每个字段都有对应的变量来表示

变量 含义
$0 读入的整行
$1 第一个字段
$n 第n个字段

(3)默认的字段分隔符是 空白符 (空格、tab键)
(4)而且个数不限,多个连续的空白符被识别为一个空白符

(六)awk中的行与列

1、记录

(1)在awk中,把读入的一行称为“记录”,英文:record
(2)类似于Excel表的一行
(3)在awk中,一般需要手动指定“记录分隔符”,用来区分每一行
(4)默认使用 \n (回车换行符) 作为记录分隔符

2、字段

(1)在awk中,把切割后的每一列称为“字段”,英文:field
(2)类似于Excel表的每一列
(3)在awk中,一般需要手动指定“字段分隔符”,用来将读入的一行文本切割成若干的字段
(4)默认使用 空白符 (空格、tab键) 作为记录分隔符

3、小结

通用概念 awk概念 默认分隔符 解释
记录 \n 回车换行符
字段 空白符 空格、tab键

二、awk工作原理

(一)典型的语法格式

awk  [options]  'BEGIN{
   action;...}pattern{action;...}END{
   action;...}'  /PATH/TO/SOMEFILE...

(二)执行流程

  • 第一步:执行 BEGIN{action;…} 语句块,与文件无关
  • 第二步:从文件或者STDIN中读取一行,然后执行 pattern{action;…} 语句块,它逐行扫描文本内容,从第一行到最后一行重复这个过程,直到文本内容全部被读取完毕
  • 第三步:当读至输入流末尾时,执行 END{action;…} 语句块

(三)语句块使用场景

1、BEGIN语句块

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

2、END语句块

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

3、pattern语句块

pattern语句块中的通用命令是最重要的部分࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值