linux---awk命令详细教程
awk是一种强大的编程语言,用于在Linux/Unix系统下对文本和数据进行处理。以下是对awk的详细教程:
一、awk简介
awk由Alfred Aho、Brian Kernighan和Peter Weinberger三人开发,其名称分别代表这三位作者姓氏的第一个字母。awk支持用户自定义函数和动态正则表达式等先进功能,是Linux/Unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。
二、awk命令格式和选项
awk命令的基本格式如下:
awk [options] 'script' var=value file(s)
或者
awk [options] -f scriptfile var=value file(s)
其中,常用的命令选项包括:
- -F fs:指定输入分隔符,fs可以是字符串或正则表达式,如-F:,默认的分隔符是连续的空格或制表符。
- -v var=value:赋值一个用户定义变量,将外部变量传递给awk。
- -m[fr] val:对val值设置内在限制。-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
三、awk脚本结构
awk脚本由模式和操作组成。模式可以是正则表达式、关系表达式等,操作则是由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。
awk脚本的基本结构如下:
awk 'BEGIN{ print"start"} pattern{ commands } END{ print"end"}' file
一个awk脚本通常由BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。
- BEGIN语句块:在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。
- END语句块:在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
- pattern语句块:中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行。
四、awk内置变量
awk提供了许多内置变量,这些变量可以在awk脚本中直接使用。以下是一些常用的内置变量:
- $n:当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
- $0:这个变量包含执行过程中当前行的文本内容。
- ARGC:命令行参数的数目。
- ARGIND:命令行中当前文件的位置(从0开始算)。
- ARGV:包含命令行参数的数组。
- CONVFMT:数字转换格式(默认值为%.6g)。
- ENVIRON:环境变量关联数组。
- ERRNO:最后一个系统错误的描述。
- FIELDWIDTHS:字段宽度列表(用空格键分隔)。
- FILENAME:当前输入文件的名。
- FNR:同NR,但相对于当前文件。
- FS:字段分隔符(默认是任何空格)。
- IGNORECASE:如果为真,则进行忽略大小写的匹配。
- NF:表示字段数,在执行过程中对应于当前的字段数。
- NR:表示记录数,在执行过程中对应于当前的行号。
- OFMT:数字的输出格式(默认值是%.6g)。
- OFS:输出字段分隔符(默认值是一个空格)。
- ORS:输出记录分隔符(默认值是一个换行符)。
- RS:记录分隔符(默认是一个换行符)。
- RSTART:由match函数所匹配的字符串的第一个位置。
- RLENGTH:由match函数所匹配的字符串的长度。
- SUBSEP:数组下标分隔符(默认值是34)。
五、awk操作
awk的操作部分可以包含变量或数组赋值、输出命令、内置函数和控制流语句等。
- 变量或数组赋值:可以在awk脚本中对变量或数组进行赋值操作。
- 输出命令:使用print或printf函数可以将处理结果输出到标准输出或文件中。
- 内置函数:awk提供了许多内置函数,如数学函数、字符串函数等,可以在脚本中直接使用。
- 控制流语句:awk支持if-else、while、for等控制流语句,用于实现复杂的逻辑控制。
六、awk示例
以下是一些awk的使用示例:
下面例子中filename表示目标文件
-
打印文件的全部内容:
awk '{print}' filename -
使用冒号作为字段分隔符,打印第一列:
awk -F: '{print $1}' filename -
搜索包含特定字符串的行,并打印整行内容:
awk -F: '/search_string/{print $0}' filename -
打印文件的总行数:
awk 'END{print NR}' filename -
使用BEGIN和END语句块进行初始化和汇总操作:
awk 'BEGIN{sum=0} {sum+=$1} END{print sum}' filename
七、注意事项
- awk脚本中的字符串和正则表达式需要使用双引号或单引号括起来。
- 在awk脚本中,变量和字段的引用不需要使用$符号进行转义。
- awk默认以空格或制表符作为字段分隔符,但可以通过-F选项指定其他分隔符。
通过以上内容的学习,您可以掌握awk的基本用法和常见操作,并能够使用awk对文本和数据进行高效的处理和分析。
相关文章:
linux---awk命令详细教程
awk是一种强大的编程语言,用于在Linux/Unix系统下对文本和数据进行处理。以下是对awk的详细教程: 一、awk简介 awk由Alfred Aho、Brian Kernighan和Peter Weinberger三人开发,其名称分别代表这三位作者姓氏的第一个字母。awk支持用户自定义…...
一个通用的居于 OAuth2的API集成方案
在现代 web 应用程序中,OAuth 协议是授权和认证的主流选择。为了与多个授权提供商进行无缝对接,我们需要一个易于扩展和维护的 OAuth 解决方案。本文将介绍如何构建一个灵活的、支持多提供商的 OAuth 系统,包括动态 API 调用、路径参数替换、…...
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
SMEC88ST SDK开发包下载 目前市场上很多嵌入式产品方案都是可以破解复制的,主要是因为方案主芯片不具备防破解的功能,这就导致开发者投入大量精力、财力开发的新产品一上市就被别人复制,到市场上的只能以价格竞争,最后工厂复制的产…...
QML学习(五) 做出第一个简单的应用程序
通过前面四篇对QML已经有了基本的了解,今天先尝试做出第一个单页面的桌面应用程序。 1.首先打开Qt,创建项目,选择“QtQuick Application - Empty” 空工程。 2.设置项目名称和项目代码存储路径 3.这里要注意选择你的编译器类型,以及输出的程…...
深入解析Android Framework中的android.location包:架构设计、设计模式与系统定制
深入解析Android Framework中的android.location包:架构设计、设计模式与系统定制 目录 引言android.location包概述核心类解析 LocationManagerLocationProviderLocationCriteriaGpsStatusGpsStatus.ListenerLocationListener位置服务的工作原理位置信息的获取与处理GPS状态…...
【C++11】类型分类、引用折叠、完美转发
目录 一、类型分类 二、引用折叠 三、完美转发 一、类型分类 C11以后,进一步对类型进行了划分,右值被划分纯右值(pure value,简称prvalue)和将亡值 (expiring value,简称xvalue)。 纯右值是指那些字面值常量或求值结果相当于…...
mongodb(6.0.15)安装注意事项,重装系统后数据恢复
window10系统 上周重装了系统,环境变量之类的都没有了。现在要恢复。 我电脑里之前的安装包没有删除(虽然之前也没在C盘安装,但是找不到了,所以需要重新下载安装),长下图这样。这个不是最新版本࿰…...
union的实际使用
记录一下,免得忘记: 1、定义一个共用体变量 这里定义一个64位变量 i2creg_rev,然后通过共用体定义两个位变量bits和bits_reverse,通过bit可以访问指定位的值大小,不需要自己再左移右移转换。 bits_reverse是bits的对…...
EKF 自动匹配维度 MATLAB代码
该 M A T L A B MATLAB MATLAB代码实现了扩展卡尔曼滤波( E...
Oracle复合索引规则指南
在Oracle中可以创建组合索引,即同时包含两个或两个以上列的索引。在组合索引的使用方面,Oracle有以下特点: 1、 当使用基于规则的优化器(RBO)时,只有当组合索引的前导列出现在SQL语句的where子句中时&#…...
JS - Array Api
判断一个对象是否为数组 /* 语法: Array.isArray(object); 参数:object 必需,要测试的对象。返回值 如果 object 是数组,则为 true;否则为 false。 如果 object 参数不是对象,则返回 false。 */ 一、改…...
【JS】for-in 和 for-of遍历对象的区别
【介绍】 for-in 和 for-of 都是 JavaScript 中用于遍历数据结构的循环语句,但它们的工作原理和适用场景有所不同。特别是它们在遍历对象时的行为是不同的。 【区别】 for-in 遍历对象 for-in 是用于遍历对象的 可枚举属性的键名(属性名)…...
【每日学点鸿蒙知识】ets匿名类、获取控件坐标、Web显示iframe标签、软键盘导致上移、改变Text的背景色
1、HarmonyOS ets不支持匿名类吗? 不支持,需要显式标注对象字面量的类型,可以参考以下文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/typescript-to-arkts-migration-guide-V5#%E9%9C%80%E8%A6%81%E6%…...
深度学习blog- 数学基础(全是数学)
矩阵:矩阵是一个二维数组,通常由行和列组成,每个元素可以通过行索引和列索引进行访问。 张量:张量是一个多维数组的抽象概念,可以具有任意数量的维度。除了标量(0D张量)、向量(…...
最后100米配送
1. 项目概述 1.1 项目目标 集成无人机与电动车:设计并实现将无人机固定在电动车上,利用电动车的电源进行飞行,实现高楼内部从电动车位置到用户办公/居住地点的最后100米精准配送。低成本实现:通过利用电动车现有的电源和结构&am…...
Linux的进程替换以及基础IO
进程替换 上一篇草率的讲完了进程地址空间的组成结构和之间的关系,那么我们接下来了解一下程序的替换。 首先,在进程部分我们提过了,其实文件可以在运行时变成进程,而我们使用的Linux软件其实也是一个进程,所以进一步…...
《计算机网络A》单选题-复习题库
1. 计算机网络最突出的优点是(D) A、存储容量大B、将计算机技术与通信技术相结合C、集中计算D、资源共享 2. RIP 路由协议的最大跳数是(C) A、13B、14C、15D、16 3. 下面哪一个网络层次不属于 TCP/IP 体系模型(D&a…...
闲谭Scala(2)--安装与环境配置
1. 概述 Java开发环境安装,需要两步,第一安装JDK,第二配置环境变量。 Scala的话,也是两步,第一安装Scale环境,第二配置环境变量。 需要注意的是,配置环境变量,主要是想让windows操…...
Python基于卷积神经网络的车牌识别系统开发与实现
1. 简介 车牌识别是人工智能在交通领域的重要应用,广泛用于高速违章检测、停车场管理和智能交通系统等场景。本系统通过基于卷积神经网络(CNN)的深度学习算法,结合 Python 和 MySQL 实现车牌的快速识别与管理。 系统特点&#x…...
Spring Boot集成Netty创建一个TCP服务器,接收16进制数据(自定义解码器和编码器)
Netty Netty是一个高性能、异步事件驱动的网络应用程序框架,它提供了对并发和异步编程的抽象,使得开发网络应用程序变得更加简单和高效。 在Netty中,EventLoopGroup是处理I/O操作的多线程事件循环器。在上面的示例中,我们创建了两个EventLoopGroup实例:bossGroup和worker…...
Harness十篇博客
propmt1. Harness engineering (OpenAI):关于如何通过约束与验证构建可靠agent-first软件的实践报告。2. Building Effective AI Agents:Anthropic关于何时使用工作流或自治代理以及如何组织系统的实践指南。3. Writing effective tools for AI agen…...
别再手动对齐时序了!SystemVerilog Clocking Block实战:从接口封装到UVM验证的保姆级避坑指南
SystemVerilog Clocking Block深度实战:告别时序混乱的验证艺术 在数字验证的世界里,时序问题就像潜伏在代码中的幽灵,总是在最意想不到的时刻制造麻烦。想象一下这样的场景:你的测试用例逻辑完美无缺,却在信号采样时遭…...
1520上市公司企业短期并购绩效和长期并购绩效数据+dofile(2008-2022)
数据来源参考《管理世界》陈仕华老师的做法,详情点击查看更多详情信息时间跨度2008-2022区域跨度企业数据格式dta/excel数据简介今天数据皮皮侠团队为大家分享一份最新的上市公司企业短期并购绩效和长期并购绩效数据,供大家研究使用。数据指标上市公司企…...
2025年全栈开发者的AI工具箱:Claude 4.5写代码、GPT-5.1做设计、DeepSeek跑日志,一个Banana Pro全搞定
2025年全栈开发者的AI工具箱:Claude 4.5写代码、GPT-5.1做设计、DeepSeek跑日志,一个Banana Pro全搞定 清晨7:30,咖啡机刚发出完成的提示音,你的IDE已经自动打开。今天要完成三个任务:重构遗留的用户认证模块、设计新…...
终极风扇控制指南:3个步骤实现Windows系统智能温控与静音优化
终极风扇控制指南:3个步骤实现Windows系统智能温控与静音优化 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…...
焦点国际冲刺港股:年营收5.3亿 利润8091万 周航夫妇控制99%股权
雷递网 雷建平 4月5日焦点国际有限公司(简称:“焦点国际”)日前更新招股书,准备在港交所上市。年营收5.3亿 利润8091万焦点国际成立于2014年,主要从事制造及销售吸收性卫生产品,以及销售卫生产品材料。最初…...
专业级硬件控制方案深度解析:如何用GHelper实现华硕笔记本高效优化
专业级硬件控制方案深度解析:如何用GHelper实现华硕笔记本高效优化 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TU…...
PixEz-flutter全链路网络可靠性架构实战:从数据同步到动态优化
PixEz-flutter全链路网络可靠性架构实战:从数据同步到动态优化 【免费下载链接】pixez-flutter 一个支持免代理直连及查看动图的第三方Pixiv flutter客户端 项目地址: https://gitcode.com/gh_mirrors/pi/pixez-flutter 在移动应用开发中,网络请求…...
WebGPU实战指南:从零构建浏览器端高性能图形应用
1. WebGPU入门:为什么它是浏览器图形技术的未来 第一次接触WebGPU时,我被它的性能数据震惊了。在同样的硬件环境下,WebGPU渲染三角形的速度是WebGL的8-10倍。这就像从乡村小路突然切换到高速公路的感觉。你可能已经习惯了用Canvas或WebGL在浏…...
seo网络排名优化如何选择关键词
SEO网络排名优化如何选择关键词 在当今数字化时代,搜索引擎优化(SEO)已经成为了每个网站和网络企业不可忽视的一部分。其中,关键词选择是影响网站排名的核心环节。如何选择最合适的关键词,以优化SEO网络排名呢&#x…...
