【Linux】gawk编辑器

devtools/2025/1/11 13:46:29/

一、基本介绍

相较于sed编辑器来说,gawk提供了一种编程语言,而不仅仅是编辑器命令。

在gawk编程语言中,可以实现以下操作:

  1. 定义变量来保存数据;
  2. 使用算术和字符串运算符来处理数据;
  3. 使用结构化编程语法(如:if-then语句和循环)为数据处理添加处理的逻辑;
  4. 提取文件中的数据将其重新排列组合,最后生成格式化报告。

gawk的报告生成能力多用于从大文本文件中提取数据并将其格式化为可读性报告,最完美的应用案例就是格式化日志文件,gawk能从日志文件中过滤出所需的数据,并将其格式化,以便于阅读。

格式:

gawk options program file

gawk选项
-F fs指定行中划分数据字段的字段分隔符
-f file从指定文件中读取gawk脚本代码
-v var=value定义gawk脚本中的变量及其默认值
-L [keyword]指定gawk的兼容模式或警告级别

1、从命令行中读取gawk脚本

gawk脚本用一对花括号定义,必须将脚本命令放到一对花括号({})之间。由于gawk命令行假定脚本是单个文本字符串,所以还必须将脚本放到单引号中。

gawk '{print "hello world"}'

由于没有在命令行中指定文件名,所以gawk程序会从STDIN接收数据,在上面的脚本运行时,它就会一直等待来自STDIN的文本。

用户需要输入一行文本并按Enter键,这样gawk才会对这行文本执行一遍脚本。由于此脚本设为显示一行固定的字符串,因此不管在数据流中输入什么文本,都会得到同样的输出。如下所示:

要终止这个gawk程序,就必须表明数据量已经结束。bash shell提供了Ctrl+D组合键来生成EOF(end-of-file)字符,通过使用它便可以终止gawk程序并返回到命令行界面。 

2、使用数据字段变量

gawk编辑器在处理文本文件中的数据时,会自动为每一行的各个数据元素分配一个变量。

默认情况下,gawk会将下列变量分配给文本行中的数据字段。

$0:代表整个文本行;

$1:代表文本行中的第一个数据字段;

$2:代表文本行中的第二个数据字段;

$n:代表文本行中的第n个数据字段

文本行中的数据字段是通过字段分隔符划分的。在读取一行文本时,gawk会用预先定义好的字段分隔符划分出各个数据字段。默认情况下,字段分隔符是任意的空白字符(如,空格,制表符)

# 显示第一个数据字段
gawk '{print $1}' test.txt

使用 -F 选项指定其它的字段分隔符:-F,

# 用中文逗号作为字段分隔符
gawk -F, '{print $1}' test.txt

3、在gawk脚本中使用多条命令

 在shell脚本中使用多条命令,只需在命令之间加分号即可。

# $4将第4个字段赋值成Wen,然后打印出整条语句
echo "My name is Ning" | gawk '{$4="Wen"; print $0}'

也可以使用次提示符一次一行地输入脚本命令。因为没有在命令行中指定文件名或文本,所以,gawk程序会从STDIN中获取数据,当运行它的时候,它就会等着读取来自STDIN输入的文本。如果要退出的话,只需同时按下Crtl+D组合键表明数据已结束即可。

4、从文件中读取脚本

 和sed编辑器一样,可以将gawk脚本放入文件中,然后在命令行中引用脚本。

可以在脚本中写上多条命令,一行写一条,不需要分号。

text的赋值不能使用单引号;在gawk中,引用变量无须像在shell脚本中的那样使用没有符号。

5、在处理数据前运行gawk脚本

 有时候,需要在处理数据前就运行gawk脚本,比如为报告创建一个标题。这时,需要用到BEGIN关键字,它会强制gawk在读取数据前执行BEGIN关键字之后指定的脚本。

gawk 'BEGIN {print "城市名:"};{print $0}' test.txt

 6、在处理数据后运行gawk脚本

END关键字允许指定一段脚本,在处理完数据后执行。可以用于给报告添加页脚。

7、小型gawk脚本文件

创建一个gawk脚本文件。

BEGIN {
print "*****最新的用户和Shell清单*****"
print "用户ID   \t Shell"
print "------- \t -------"
FS=":"
}{
print $1 "           \t  " $7
}END {
print "*****已总结完毕*****"
}
gawk -f lnn.gawk /etc/passwd | more

 


http://www.ppmy.cn/devtools/149623.html

相关文章

自动化巡检系统如何提高运维效率?

一、自动化巡检系统简介 (一)定义与基本原理 自动化巡检系统是一种借助先进的信息技术,旨在对各类系统进行高效、精准监测的智能化工具。它主要依靠预设的脚本、专业的监测工具以及相关的软件模块,按照既定的规则和流程&#xff0…

Wireshark编译手册(Windows)

以下是对 Wireshark 官方文档中“Windows 平台的设置和构建说明”部分的翻译和总结: 2.2. Windows 平台 本节提供了在 Windows 上进行 Wireshark 开发的快速设置指南,包含推荐的配置。 2.2.1. 使用 Microsoft Visual Studio 注意:除非您非…

Jenkins内修改allure报告名称

背景: 最近使用Jenkins搭建自动化测试环境时,使用Jenkins的allure插件生成的报告,一直显示默认ALLURE REPORT,想自定义成与项目关联的名称,如图所示,很明显自定义名称显得高大上些,之前…

Python 模块 Uvicorn 实战指南

文章目录 1. 介绍和安装1.1 介绍1.2 安装 2. 创建基础应用2.1 简单的 HTTP 应用2.2 添加日志 3. 实现高级功能3.1 支持 WebSocket3.2 优化运行性能 4. Nginx 配置反向代理4.1 安装与配置 Nginx4.2 启用 SSL 支持4.3 性能优化建议 5. 常见问题与解决方案5.1 高并发问题5.2 WebSo…

ETL的工作原理

ETL的工作原理 什么是ETL_云计算主题库-阿里云 ETL的工作原理可以分为三个主要的步骤:Extract(提取)、Transform(转换)、Load(加载)。 工作步骤 描述 Extract (提取)…

Kotlin | Android Provider 的实现案例

目标 使用 Android Room 实现持久化库。 代码 Kotlin 代码编写 DemoDatabase,在build生成 DemoDatabase_Impl 疑问 Provider的数据会存在设备吗? 内部存储: 当使用 Room 创建数据库(如 DemoDatabase),数据库文件通常…

nginx运行之后显示的是上一个项目,如何解决

重启 Nginx 使配置生效 修改 Nginx 配置后,你需要重新加载或重启 Nginx,以使配置生效。执行以下命令: sudo nginx -t # 测试配置是否正确 sudo systemctl restart nginx # 重启 Nginxbash 复制代码 检查浏览器缓存 浏览器可能缓存了旧…

代码随想录算法训练营第六十天|KM94.城市间货物运输Ⅰ|KM95.城市间货物运输Ⅱ|KM96.城市间货物运输Ⅲ

94. 城市间货物运输 I 2、Bellman_ford队列优化算法(又名SPFA) SPFA是对Bellman_ford算法的优化,由于Bellman_ford 算法 每次都是对所有边进行松弛,其实是多做了一些无用功。其实只需要对 上一次松弛的时候更新过的节点作为出发节…