shell编程四剑客之awk

awk是一个强大的文本处理工具,广泛应用于Linux和UNIX环境。它逐行处理文件,基于模式匹配执行动作。本文介绍了awk的基本原理、语法参数、常用命令选项、内置变量、内置函数、操作符和流程控制语句,以及BEGIN和END模块的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

awk的简介

awk是一个优良的文本处理工具,Linux及UNIX环境中现有的功能最强大的数据处理引擎之一,以Aho、Weinberger、Kernighan三位发明者名字首字母命名为awk,awk是一个行级文本高效处理工具,awk经过改进生成的新的版本有nawk、gawk,一般Linux默认为gawk,gawk是awk的GNU开源免费版本。
awk基本原理是逐行处理文件中的数据,查找与命令行中所给定内容相匹配的模式,如果发现匹配内容,则进行下一个编程步骤,如果找不到匹配内容,则继续处理下一行。其语法参数格式如下:在这里插入图片描述
awk常用参数、变量、函数详解如下。
(1)awk基本语法参数详解如下:
·□单引号’'是为了和shell命令区分开。
·□大括号{}表示一个命令分组。
·□pattern是一个过滤器,表示匹配pattern条件的行才进行action处理。
□action是处理动作,常见动作为print。
·□使用#作为注释,pattern和action可以只有其一,但不能两者都没有。

常用命令选项

-F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
-v var=value 赋值一个用户定义变量,将外部变量传递给awk
-f scripfile 从脚本文件中读取awk命令
-m[fr] val 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
(2)awk内置变量详解如下:
·□ FS:分隔符,默认是空格。
·□ OFS:输出分隔符。
·□ NR:当前行数,从1开始。
·□ NF:当前记录字段个数。
·□ $0:当前记录。
·□ $1~$n:当前记录第n个字段(列)。
(3)awk内置函数详解如下:
·□ gsub(r,s):在$0中用s代替r。
·□ index(s,t):返回s中t的第一个位置。
·□ length(s):s的长度。
·□ match(s,r):s是否匹配r。
·□ split(s,a,fs):在fs上将s分成序列a。
·□ substr(s,p):返回s从p开始的子串。
(4)awk常用操作符、运算符及判断符,详解如下:
·□ ++--:增加与减少(前置或后置)。
·□ ^∗∗:指数(右结合性)。
·□ !+-:非、一元(unary)加号、一元减号。
·□ +-∗/%:加、减、乘、除、余数。
·□ ===!==:数字比较。
·□ &&:逻辑and。
□ ‖:逻辑or。
·□ =+=-=∗=/=%=^=∗∗=:赋值。
(5)awk与流程控制语句如下:
·□ if(condition){}else{};
·□ while{};
·□ do{}while(condition);
·□ for(init;condition;step){};
·□ break/continue。
(6)BEGIN 和 END 模块
通常,对于每个输入行,awk 都会执行每个脚本代码块一次。然而,在许多编程情况中, 可能需要在 awk 开始处理输入文件中的文本之前执行初始化代码。对于这种情况,awk 允许 您定义一个 BEGIN 块。我们在前一个示例中使用了 BEGIN 块。因为 awk 在开始处理输入文件之前会执行 BEGIN 块,因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它 在程序中以后会引用的全局变量的极佳位置。
awk 还提供了另一个特殊块,叫作 END 块。awk 在处理了输入文件中的所有行之后执行 这个块。通常,END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。
BEGIN{}: 读入第一行文本之前执行的语句,一般用来初始化操作
{}: 逐行处理
END{}: 处理完最后以行文本后执行,一般用来处理输出结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值