第2.1节:AWK脚本结构

1 第2.1节:AWK脚本结构

1.1 第1个awk脚本

  假设有如下的数据待处理,需要将第2列提取出来:

#, 名称,           大小,      类型, 修改,              属性
1, COMMIT_EDITMSG, 331 bytes, 文件, 24/09/16 08:42:19, -a-----
2, config,         130 bytes, 文件, 24/09/14 11:52:27, -a-----
3, description,    73 bytes,  文件, 24/09/14 11:52:27, -a-----
4, HEAD,           23 bytes,  文件, 24/09/14 11:52:27, -a-----
5, index,          145 bytes, 文件, 24/09/16 08:42:19, -a-----
6, tgitchangelist, 0 bytes,   文件, 24/09/16 08:42:21, -a-----

1.1.1 命令行方式

awk示例:

awk '{print $2}' data.txt

awk命令后的单引号内容表示awk语句。

输出:

名称,
COMMIT_EDITMSG,
config,
description,
HEAD,
index,
tgitchangelist,

1.1.2 脚本方式

  将下面的代码复制到文件get_col_2.awk

#!/bin/awk -f
{print $2
}

注意:第1行注释很重要,-f表示该脚本可以接收文件
执行命令get_col_2.awk data.txt
输出:

$ ./get_col_2.awk data.txt
名称,
COMMIT_EDITMSG,
config,
description,
HEAD,
index,
tgitchangelist,
  • 发现什么没有? 不论是命令方式,还是脚本文件方式,awk代码都用{}包围。

1.2 模式 - 动作(Pattern - Action)

  在 AWK 脚本中,模式 - 动作是核心结构。模式用于筛选输入数据中的特定行,动作则定义了对这些筛选出来的行要执行的操作。
示例代码:

#!/bin/awk -f
$1 % 2 == 0 {print $1,$2
}$1 % 3 == 0 {print $1,$2
}

  上述示例代码中有两个模式和动作,

  • 第1个模式:第1列的数字整除2,即$1 % 2 == 0,则执行后面{print $1,$2}中的动作,这里是打印第1、2列。
  • 第2个模式:第1列的数字整除3,即$1 % 3 == 0,则执行后面的{print $1,$2}中的动作,这里是打印1、2列,当然,可以做别的事。
    输出:
$ ./get_col_2.awk data.txt
#, 名称,
#, 名称,
2, config,
3, description,
4, HEAD,
6, tgitchangelist,
6, tgitchangelist,

注:由于有多个模式-动作块,所以会发现有些数据打印了多次!

🕮说明
  awk的处理逻辑是读取每1行文本,将这行文本丢到每个模式-动作进行处理,如果匹配了模式,则执行该模式对应的动作。

  模式可以是关系表达式(如$1 > 100筛选出第一列数据大于 100 的行)、正则表达式(如/error/筛选出包含 “error” 字符串的行)等。动作部分则能包含各种 AWK 语句,像变量赋值、数学运算、调用函数等。通过灵活组合模式与动作,实现对数据的精准处理。

1.3 BEGIN 和 END 块

BEGIN 块在 AWK 读取输入数据之前执行,常用于初始化变量、设置环境等操作。例如,在对系统及进程的 CPU、内存进行自动监控分析时,可能需要初始化一些统计变量,记录总的 CPU 使用时长、内存使用峰值等,就可以在 BEGIN 块中完成:

BEGIN {    totalCpuTime = 0    maxMemoryUsage = 0}

END 块在所有输入数据处理完毕后执行,通常用于输出最终结果、清理资源等。继续上面的例子,在分析完所有数据后,我们想输出总的 CPU 使用时长和内存使用峰值的统计结果,就可在 END 块中实现:

END {    print "Total CPU Time:", totalCpuTime    print "Max Memory Usage:", maxMemoryUsage}

通过 BEGIN 和 END 块,能让 AWK 脚本在数据处理的前后阶段完成一些准备和收尾工作,与中间的模式 - 动作结构协同,构建出完整、高效的数据处理流程,这也是 AWK 在数据处理领域强大功能的体现。

1.4 总结:

  一个完整的awk脚本包含以下几部分

  • 注释:该注释是有意义的,可以告诉脚本引擎该脚本的执行方式
  • BEGIN块:在1行数据都没有处理的时候,进行一些初始化设置,也可以定义一些函数
  • 模式-动作块:数据处理代码,可以有多个模式-动作块,对同一行数据进行多次处理
  • END块:数据全部处理结束后执行的语句

作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来自AI平台,如:豆包、DeepSeek(硅基流动)(注册链接)等,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!
Copyright © 2022~2025 All rights reserved.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win NAS 分享功能:精准、安全的内容共享

WinNAS 不仅是一款强大的 NAS服务,还通过耘想存储 APP 提供了便捷的内容分享功能。无论是与个人、群聊、朋友圈还是公众分享文件,WinNAS 都配备了严格的权限管理机制,确保您的数据安全且精准地传递给目标对象。以下是 WinNAS 分享功能的详细介…

C# 项目06-计算程序运行时间

实现需求 记录程序运行时间,当程序退出后,保存程序运行时间,等下次程序再次启动时,继续记录运行时间 运行环境 Visual Studio 2022 知识点 TimeSpan 表示时间间隔。两个日期之间的差异的 TimeSpan 对象 TimeSpan P_TimeSpa…

网络华为HCIA+HCIP NFV

目录 NFV关键技术:虚拟化 NFV关键技术:云化 NFV架构 NFV标准架构 ​编辑 NFV架构功能模块 NFV架构接口 NFV关键技术:虚拟化 在NFV的道路上,虚拟化是基础,云化是关键。传统电信网络中,各个网元都是…

SpringBoot实现异步调用的方法

在Java中使用Spring Boot实现异步请求和异步调用是一个常见的需求,可以提高应用程序的性能和响应能力。以下是实现这两种异步操作的基本方法: 一、异步请求(Asynchronous Request) 异步请求允许客户端发送请求后立即返回&#x…

xwiki自定义认证实现单点登录

xwiki支持自定义认证 继承XWikiAuthServiceImpl类后将类配置到WEB-INFO下xwiki.cfg的xwiki.authentication.authclass属性上开启自定义认证。 官方文档:https://www.xwiki.org/xwiki/bin/view/Documentation/AdminGuide/Authentication/ 官方自定义认证的示例&#…

使用vite新建vue3项目 以及elementui的使用 vite组件问题

项目创建 在创建项目之前我们应该在终端中输入 node -v 和 npm -v 只有它们都能正常查看版本号才说明我们之前是已经安装完成的。 接下来我们在合适的目录下输入npm create vitelatest 它会要求你输入项目的名称,这个名称和我们之前通过cil创建的命名规则一样。…

音频录制小妙招-自制工具-借助浏览器录一段单声道16000采样率wav格式音频

先看效果 1、打开页面 2、点击开始录音,弹出权限提示,点击“仅这次访问时允许” 3、录完后,点击停止 4、文件自动下载到默认目录 上代码 js 部分 document.addEventListener(DOMContentLoaded, () > {const startBtn document.getEleme…

Mysql-经典实战案例(10):如何用PT-Archiver完成大表的自动归档

真实痛点:电商订单表存储优化场景 现状分析 某电商平台订单表(order_info)每月新增500万条记录 主库:高频读写,SSD存储(空间告急)历史库:HDD存储,只读查询 优化目标 …

CUDA编程面试高频30题

1. 什么是CUDA?它与GPU的关系是什么? 答: CUDA(Compute Unified Device Architecture)是由NVIDIA开发的一种并行计算平台和应用程序接口模型。它允许开发者利用NVIDIA GPU进行通用计算任务,而不仅仅是图形渲染。CUDA提…

数学建模 绘图 图表 可视化(3)

文章目录 前言二维散点图系列坐标图数据分布特征,Q-Q、P-P图分类图一般的曲线图峰峦图总结参考资料 前言 承接上期 数学建模 绘图 图表 可视化(1)的总体描述,这期我们继续跟随《Python 数据可视化之美 专业图表绘制指南》步伐来学…

【数据结构】栈(Stack)、队列(Queue)、双端队列(Deque) —— 有码有图有真相

目录 栈和队列 1. 栈(Stack) 1.1 概念 1.2 栈的使用(原始方法) 1.3 栈的模拟实现 【小结】 2. 栈的应用场景 1、改变元素的序列 2、将递归转化为循环 3、逆波兰表达式求值 4、括号匹配 5、出栈入栈次序匹配 6、最小栈…

【强化学习】Reward Model(奖励模型)详细介绍

📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…

国家雪亮工程政策护航,互联网监控管理平台铸就安全防线

在当今社会,公共安全是国家发展的重要基石,也是人民安居乐业的基本保障。为了打造更高水平的平安中国,国家推出了意义深远的雪亮工程,并出台了一系列相关政策,为公共安全事业保驾护航。而互联网监控管理平台作为雪亮工…

蓝桥杯 第十天 2019国赛第4题 矩阵计数

最后一个用例超时了,还是记录一下 import java.util.Scanner;public class Main {static int visited[][];static int count 0;static int n,m;public static void main(String[]args) {Scanner scan new Scanner(System.in);n scan.nextInt();//2m scan.nextIn…

coding ability 展开第五幕(二分查找算法)超详细!!!!

. . 文章目录 前言二分查找搜索插入的位置思路 x的平方根思路 山脉数组的峰顶索引思路 寻找旋转排序数组中的最小值思路 总结 前言 本专栏上篇博客已经把滑动指针收尾啦 现在还是想到核心——一段连续的区间,有时候加上哈希表用起来很爽 今天我们来学习新的算法知识…

BEVFormer报错(预测场景与真值场景的sample_token不匹配)

在运行test.py时报错: BEVFormer/projects/mmdet3d_plugin/datasets/nuscnes_eval.py: init()函数报错 assert set(self.pred_boxes.sample_tokens) set(self.gt_boxes.sample_tokens), \"Samples in split doesnt match samples in predictions…

网络安全威胁与防护措施(下)

8. 恶意软件(Malware) **恶意软件(Malware,Malicious Software)**是指旨在通过破坏、破坏或未经授权访问计算机系统、网络或设备的程序或代码。恶意软件通常用于窃取敏感信息、破坏系统、窃取资源、干扰正常操作&…

基于springboot的母婴商城系统(018)

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本母婴商城系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…

shell 脚本搭建apache

#!/bin/bash # Set Apache version to install ## author: yuan# 检查外网连接 echo "检查外网连接..." ping www.baidu.com -c 3 > /dev/null 2>&1 if [ $? -eq 0 ]; thenecho "外网通讯良好!" elseecho "网络连接失败&#x…

使用OBS进行webRTC推流参考

参考腾讯云官方文档: 云直播 OBS WebRTC 推流_腾讯云 说明非常详细,分为通过WHIP和OBS插件的形式进行推流。 注意:通过OBS插件的形式进行推流需要使用较低的版本,文档里有说明,需要仔细阅读。