SHELL脚本学习(十三)初识 gawk 编辑器

概述

gawk提供了一种编程语言,而不仅仅是编辑器命令。

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

  • 定义变量保存数据
  • 使用算数和字符串运算符处理数据
  • 使用结构化编程概念 为数据处理添加处理逻辑
  • 提取文件中的数据并将其重新排列组合,最后生成格式化报告

一、gawk命令格式

gawk options program file
gawk的可用选项

选项 描述
-F fs 指定字段分隔符
-f file 指定脚本文件
-v var=value 定义gawk脚本中的变量及默认值
-L [keyword] 执行兼容模式或警告级别

gawk的强大之处在于脚本,你可以编写脚本来读取文件中的数据,然后对其进行处理并显示,形成各种输出报告。

二、从命令行读取gawk脚本

gawk脚本用一对花括号定义,必须将命令放到花括号之间。

由于gawk命令行假定脚本是单个文本字符串,因此还必须将脚本放到单引号中。

shell 复制代码
$ gawk '{print "hello world"}'
sadas
hello world

脚本定义了一个命令 print,它会将输出打印到STDOUT。

因为没有指定文件,所以它一直等待STDIN的输入。无论输入什么,都会打印 hello world。按ctrl+D结束执行。

三、使用数据字段变量

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

  • $0 代表整个文本行
  • $1 代表第一个字段
  • $2 代表第二个字段
  • $n 代表第n个字段
shell 复制代码
$ cat <data1
header line
data line 1
End of data line

$ gawk '{print "first="$1 " second="$2}' data1
first=header second=line
first=data second=line
first=End second=of

四、在脚本中使用多条命令

要在命令行指定的脚本中使用多条命令,只需在命令间加分号即可。

shell 复制代码
$ cat <data1
header line
data line 1
End of data line

$ gawk '{$1="replacement";print $0}' data1
replacement line
replacement line 1
replacement of data line

这个脚本先将第一个字段改成 replacement,再显示整行文本。

五、从文件中读取脚本

gawk允许将脚本保存在文件中,然后在命令行中引用脚本。

shell 复制代码
$ cat <gawk_cmd
{print $1="replacement"  " "$0}

$ gawk -f ./gawk_cmd data1
replacement header line
replacement data line 1
replacement End of data line

六、处理数据前执行脚本

gawk会在读取数据前 执行 BEGIN指定的脚本

shell 复制代码
$ cat <gawk_cmd
BEGIN {
    print "Replacement result:"
}

{print $1="replacement"  " "$0}

$ gawk -f ./gawk_cmd data1
Replacement result:
replacement header line
replacement data line 1
replacement End of data line

七、处理输出后执行脚本

END关键字允许指定一个脚本,gawk会在处理完数据之后执行这个脚本。

shell 复制代码
 cat <gawk_cmd
BEGIN {
    print "Replacement result:"
}

{print $1="replacement"  " "$0}

END {
    print "End of file"
}

$ gawk -f ./gawk_cmd data1
Replacement result:
replacement header line
replacement data line 1
replacement End of data line
End of file
相关推荐
Juicedata16 分钟前
JuiceFS v1.3-Beta2:集成 Apache Ranger,实现更精细化的权限控制
运维·人工智能·ai
IT成长日记25 分钟前
05【Linux经典命令】Linux 用户管理全面指南:从基础到高级操作
linux·运维·服务器·用户管理·命令
小鱼小鱼.oO4 小时前
阿里云服务器安装nginx并配置前端资源路径(前后端部署到一台服务器并成功访问)
服务器·nginx·阿里云
资讯第一线4 小时前
Windows系统工具:WinToolsPlus 之 SQL Server Suspect/质疑/置疑/可疑/单用户等 修复
运维
惊起白鸽4505 小时前
LVS负载均衡
运维·负载均衡·lvs
Sapphire~6 小时前
Linux-07 ubuntu 的 chrome 启动不了
linux·chrome·ubuntu
伤不起bb6 小时前
NoSQL 之 Redis 配置与优化
linux·运维·数据库·redis·nosql
萌新小码农‍7 小时前
Spring框架学习day7--SpringWeb学习(概念与搭建配置)
学习·spring·状态模式
蓝婷儿7 小时前
6个月Python学习计划 Day 15 - 函数式编程、高阶函数、生成器/迭代器
开发语言·python·学习
行云流水剑7 小时前
【学习记录】深入解析 AI 交互中的五大核心概念:Prompt、Agent、MCP、Function Calling 与 Tools
人工智能·学习·交互