当前位置: 首页 > news >正文

文本三剑客--awk - 教程

1.概述

awk是一种处理文本文件的语言,是一个强大的文本分析工具。它是专门为文本处理设计的编程语言,也是行处理管道或文件。就是软件,通常用于扫描、过滤、统计汇总工作,数据可以来自标准输入也可能

2.工作原理

  • 当读到第一行时,匹配条件,随后执行指定动作,再接着读取第二行数据处理,不会默认输出假设没有定义匹配条件默认是匹配所有数据行,awk隐含循环,条件匹配多少次动作就会执行多少次
  • 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。

3.工作流程

3.1运行模式

  • 正则表达式 : /root/ 匹配含有 root 的行
  • /*.root/
  • 关系表达式: < > && || + *
  • 匹配表达式: ~ !~ 动作:
  • 变量 命令 内置函数 流控制语句它的语法结构如下:

awk [options] 'BEGIN{ print "start" } ‘pattern{ commands }’ END{ print "end" }' file (其中:BEGIN END 是 AWK 的关键字部,因此必须大写;这两个部分开始块和结束块是可选的)

3.2执行流程

BEGIN语句设置计数和打印头部信息,在任何动作之前进行

END语句输出统计结果,在完成动作之后执行

AWK执行的流程非常简单:读(Read)执行(Execute)重复(Repeat)。下面的流程图描述出了AWK的工作流程。

4.基本语法

awk 选项' 模式或条件{操作}' 文件1 文件2 ...

awk -f 脚本文件 文件1 文件2 ..

**AWK 支持两种不同类型的变量:内建变量(可直接使用),自定义变量awk内置变量(预定义变量)**

如下所示:

  • FS:指定每行文本的字段分隔符,默认为空格或制表位。
  • NF:当前处理的行的字段个数。在执行过程中对应于当前的字段数,NF:列的个数
  • NR:当前处理的行的行号(序数)。 在执行过程中对应于当前的行号
  • $0:当前处理的行的整行内容。
  • $n:当前处理行的第 n 个字段(第 n 列)。比如: $1 表示第一个字段,$2 表示第二个字段
  • FILENAME:被处理的文件名(当前输入记录的名)。
  • FNR 各文件分别计数的行号
  • OFS 输出字段分隔符(默认值是一个空格)
  • ORS 输出记录分隔符(默认值是一个换行符)
  • " \n'就是RS:行分隔符。awk从文件上读取资料时,将根据Rs的定义把资料切割成许多条记录, 而awk一次仅读入一条记录,以进行处理。预设值简单来说:数据记录分隔,默认为\n,即每行为一条记录)

5.实战案例

5.1案例文本测试

1.以“:”分隔/etc/passwd 用制表符作为分隔符输出打印第1第2列

2.定义多个分隔符,只要看到其中一个都算作分隔符 打印/etc/passwd第九列

5.2内建变量

awk常用内置变量:$1、$2、NF、NR、$0

  • $1:代表第一列
  • $2:代表第二列以此类推
  • $0:代表整行
  • NF:一行的列数
  • NR:行数

1.打印包含root的整行内容

2.打印具备root的行的第一列和第六列

3.打印每一行的列数

4.显示行号

5.3 BEGIN END运算

逐行执行开始之前执行什么任务,结束之后再执行什么任务,用BEGIN、END

BEGIN一般用来做初始化操作,仅在读取数据记录之前执行一次

END一般用来做汇总操作,仅在读取完数据记录之后执行一次

5.3.1 awk的运算

1.计算3*4

2.计算2的三次方

3.计算二分之一

5.3.2模糊匹配

模糊匹配,用~表示包含,!~表示不包含

1.打印第一列匹配涵盖有root的数据

2.模糊匹配,只要有ro就匹配打印

3.匹配第七列不以nologin结尾的,打印第一列第七列

5.3.3数值与字符串比较

比较符号:== != <= >= < >

1.打印第5行

2.打印所有第3列>1000的行

5.3.4逻辑运算

&& 和 || 是逻辑运算符,用于组合多个条件并控制程序流程。

  • && 要求所有条件都为真时才为真,否则为假
  • || 只要有一个条件为真就为真,全为假时才为假
5.3.5其他内置变量
  • FS:输入字段的分隔符 默认是空格
  • OFS:输出字段的分隔符 默认也是空格
  • FNR:读取材料的记录数(行号),从1开始,新的记录重新重1开始计数
  • RS:输入行分隔符 默认为换行符
  • ORS:输出行分隔符 默认也是为换行符

1.打印第一列

2.打印第一第二列,设置分隔符为“---”

3.读取两个文件各个行号,并打印每行

4.指定“:”为换行符,进行每行打印

5.4awk高级用法 if语句

awk的if语句也分为单分支、双分支和多分支

1.打印第3列小于10的整行

2.第三列小于10的打印第三列,否则打印第一列

5.5BEGIN END 流程

awk还支撑for循环、while循环、函数、数组等

1.统计以/bin/bash结尾的行数

2.输出以冒号分隔且第7个字段中囊括/bash的行的第1个字段

3.输出第7个字段既不为/bin/bash,也不为/sbin/nologin的所有行

4.调用wc -l命令统计启用bash 的用户个数,等同于grep -c "bash$" etc/passwd

http://www.gsyq.cn/news/114539.html

相关文章:

  • 2025年知名的换热容器(盘管和夹套接收罐)/铁钼法甲醛装置内换热容器制造厂家 - 行业平台推荐
  • 深入解析:Python 模块的概念与导入:从基础语法到高级技巧
  • 15、网络资源访问与远程系统管理
  • 24、深入了解Linux设备驱动与网络设备
  • AI日报 - 2025年12月17日
  • 25、嵌入式设备硬件控制与驱动开发全解析
  • 26、Linux设备驱动与初始化程序详解
  • 23、使用Mender进行OTA更新及设备驱动接口详解
  • BIThesis LaTeX模板:2025新规适配的零基础配置方法
  • csp信奥赛C++标准模板库STL(6):map和multimap的使用详解
  • KeyarchOS适配calendar-1.28-1.20140613cvs
  • 用EmotiVoice构建个性化语音助手,只需几秒音频样本
  • Speechless微博备份神器:一键导出PDF完整指南
  • 2025实力强的游戏交易平台TOP5权威推荐:甄选不错的游戏 - 工业推荐榜
  • 2025年知名的永磁直连离心风机/节能永磁离心风机厂家实力及用户口碑排行榜 - 行业平台推荐
  • EmotiVoice能否用于外语学习发音纠正?清晰度评估
  • 高效TTS模型推荐:EmotiVoice支持多种情绪表达
  • UVa 1533 Moving Pegs
  • Vosk Android中文语音识别完整部署指南:解决模型解压失败的终极方案
  • LVGL应用和部署(几种人机交互的方式)
  • UVa 10794 The Deadly Olympic Returns
  • 2025年十大佛山座椅电梯生产企业选择哪家好?专业加工厂与维 - 工业推荐榜
  • EmotiVoice在智能手表等穿戴设备上的适配挑战
  • EmotiVoice如何应对语音合成中的生僻字发音问题?
  • 云原生架构适配:Kubernetes部署EmotiVoice实践
  • AI元人文构想:意义行为原生论——回应质疑
  • 2025年上海台车炉靠谱生产商推荐:优质台车炉精密型厂家有哪 - 工业推荐榜
  • 2025年上海屋面防水维修公司排名:专业房顶防水与屋面防水涂 - mypinpai
  • 深入解析:STM32外设学习-I2C通信(代码)--MPU6050--笔记
  • GPT-SoVITS性能优化实战:从基础配置到极致效率的完整指南