Linux文本处理工具awk用法总结

awk是一种文本处理工具,它逐行读取输入文本,根据用户提供的模式匹配特定的行,然后执行对应的动作来处理匹配到的行。

在处理过程中,awk 将文本行分割成多个字段,并提供了丰富的内置函数和控制结构来处理和操作这些字段。

最后,awk将处理结果输出到标准输出或指定的输出文件。

简而言之,awk的原理是通过模式匹配、字段分割和动作执行来处理文本数据。

一. 基本语法

awk [options] 'pattern {action}' [file...]

options:awk的选项,用于控制其行为。常用选项包括-F(指定字段分隔符)和-v(定义变量)等。

pattern:模式,用于匹配输入数据的某些行。可以是正则表达式或比较操作。

{action}:动作,用于对匹配到的行进行处理。可以是打印、赋值、计算等操作。

二. 支持功能

1. 列处理

awk以列为单位处理文本数据,可以对列进行选择、提取、操作和计算等。

可以使用$符号来引用不同的列,例如$1表示第一列,$2表示第二列,以此类推。

2. 行处理

awk可以按行读取输入文件,并根据指定的条件对行进行匹配和处理。

使用正则表达式来匹配行,或者使用关系运算符对行进行筛选。

3. 条件语句

支持if-else条件语句,根据条件执行不同的动作,使用关系运算符、逻辑运算符和正则表达式来构建条件。

4. 循环结构

支持for和while循环结构,对数据进行迭代处理,循环结构与条件语句结合使用,实现更复杂的数据处理逻辑。

5. 数组操作

支持数组,将数据存储在数组中,并通过索引进行访问和操作,使用数组来实现一些统计和计数的操作。

6. 内置函数

提供了许多内置函数,用于处理字符串、数值和日期等数据。

例如,length()函数用于计算字符串长度,substring()函数用于提取子字符串,split()函数用于拆分字符串等。

7. 格式化输出

提供了printf()函数,用于格式化输出,使用格式化字符串来控制输出的格式,包括字段宽度、精度、对齐方式等。

8. 文件处理

可处理多个文件,按顺序处理多个输入文件的数据,也能使用通配符来匹配多个文件。

9. 命令行参数

接受命令行参数,并将其作为变量在脚本中使用,使用-v选项来定义变量,或使用ARGV数组来访问命令行参数。

10. 正则表达式

支持使用正则表达式进行模式匹配和替换,如使用~运算符进行匹配操作,使用sub()或gsub()函数进行替换操作。

11. 文件内容修改

可直接修改文件内容,使用-i选项可以直接在原始文件上进行修改,而不是将结果输出到标准输出。

12. 输入输出重定向

支持输入输出重定向,可以从文件中读取数据,也可以将结果输出到指定的文件中,方便地处理大量的数据文件,并将结果保存在文件中。

三. 应用场景

适用于各种需要对文本数据进行处理、提取、转换和分析的场景,无论是处理小型文本文件还是大型日志数据,awk都可以轻松地完成任务。

四. awk常用表达式

1. 模式匹配

模式匹配可以使用简单字符串或正则表达式来匹配文本行。

例如,/pattern/表示匹配包含特定模式的行。

2. 条件表达式

条件表达式用于在动作中执行特定的操作,常见的条件表达式包括比较运算符(如<、>、==、!=等)和逻辑运算符(如&&、||)。

例如,$2 > 10表示第二个字段大于10的条件。

3. 算术表达式

 算术表达式用于处理数字数据,使用常见的算术运算符(如+、-、*、/等)对数字进行加减乘除运算。

例如,$3 * 0.1表示将第三个字段乘以0.1的结果。

4. 字符串拼接

使用""来拼接字符串,例如,"Hello, " $1表示将字符串"Hello, "和第一个字段拼接起来。

5. 内置变量

awk提供了许多内置变量,可以在表达式中使用。

NR表示当前行号,NF表示当前行的字段数量,$0表示整行文本。

例:

输出行号和行内容

awk '{ print NR, $0 }' file.txt

输出行号和字段数量的信息

awk '{ print "Line", NR, "has", NF, "fields." }' file.txt

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

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

相关文章

基于卷尾猴算法优化概率神经网络PNN的分类预测 - 附代码

基于卷尾猴算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于卷尾猴算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于卷尾猴优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络…

【Java程序员面试专栏 专业技能篇】Java SE核心面试指引(二):面向对象思想

关于Java SE部分的核心知识进行一网打尽,包括四部分:基础知识考察、面向对象思想、核心机制策略、Java新特性,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第二部分:面向对象思想,子节点表示追问或同级提问 面向对象基…

按照指定条件对数据进行分组并对每个分组内的全部数据应用自定义函数进行聚合计算groupby().apply()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 按照指定条件对数据进行分组 并对每个分组内的全部数据 应用自定义函数进行聚合计算 groupby().apply() [太阳]选择题 下列输出正确的是&#xff1a; import pandas as pd data {Name: [A, B,…

.net对接阿里云CSB服务

public Response<string> Main(MonthPlanRequest request){string apiName "MonthPlan", postData request.ToJson(); var result ConnectCSB(apiName, postData);return InvokeResult.Fail<string>("访问成功");}/// <summary>///…

多线程的概念

点击链接返回标题-> 什么是进程&#xff1f; 进程&#xff08;Process&#xff09;&#xff0c;是程序的基本执行实体。 在早期面向进程设计的计算机结构中&#xff0c;进程是程序的基本执行实体&#xff1b; 在当代面向线程设计的计算机结构中&#xff0c;进程是线程的容器…

求二叉树中指定节点所在的层数(可运行)

运行环境.cpp 我这里设置的是查字符e的层数&#xff0c;大家可以在main函数里改成自己想查的字符。&#xff08;输入的字符一定是自己树里有的&#xff09;。 如果没有输出结果&#xff0c;一定是建树错误&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…

Maven环境配置

Maven环境配置 下载Maven 网址&#xff1a;https://maven.apache.org/download.cgi 如果你的系统是Windows的直接按照箭头指示下载即可 环境变量配置 配置环境变量&#xff1a;将 Maven 的安装目录添加到您的系统环境变量中。 右键点击“我的电脑”&#xff08;或“此电脑…

Startdrive中上传参数设置的具体方法和注意事项

Startdrive中上传参数设置的具体方法和注意事项 适用于配 SINAMICS S120、G130、G150、S150和MV(基于CU3x0-2的驱动器)和所有启动驱动器版本INAMICS G115D/G120/G120D/G120C/G120P/G110M(基于CU2x0-2的驱动器) 根据SINAMICS类型的不同,Startdrive中的Upload参数有所不同。…

leetcode刷题详解——粉刷房子

1. 题目链接&#xff1a;LCR 091. 粉刷房子 2. 题目描述&#xff1a; 假如有一排房子&#xff0c;共 n 个&#xff0c;每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种&#xff0c;你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然&#xff0c;因为…

Ubuntu20上离线安装samba

如果联网&#xff0c;一条 sudo apt-get install samba就可能解决问题&#xff0c;但是没有网&#xff0c;那么只能一个一个的解决问题&#xff1a; 我以为装了samba-common就可以了&#xff0c;发现smbd.serverice not found,于是开始了漫长的下载依赖包&#xff0c;安装&…

Linux中Team链路聚合配置

目录 一、Team介绍 二、网卡的bonding和Teaming技术 三、Teaming常用工作模式 四、实验环境 五、添加物理网卡 1、给虚拟机新增四张物理网卡 2、查看网卡信息 六、Team链路聚合配置 1、创建team0的网络接口 2、为team0设置静态IP,掩码位&#xff0c;网关&#xff0c;dns…

【Django-01】 视图函数和视图类

视图函数 作用详解视图函数的特点视图类实际开发怎么用一个无意义的demo 作用 用于返回给前端数据详解 def list(request):"""1.普通的视图函数 request是HttpRequest 函数2.且必须用request.GET|request.POST 指定方法是什么方法3.返回值不能用 rest_framewor…

25 - 单例模式:如何创建单一对象优化系统性能?

从这一讲开始&#xff0c;我们将一起探讨设计模式的性能调优。在《Design Patterns: Elements of Reusable Object-Oriented Software》一书中&#xff0c;有 23 种设计模式的描述&#xff0c;其中&#xff0c;单例设计模式是最常用的设计模式之一。无论是在开源框架&#xff0…

Java并发编程第12讲——cancelAcquire()流程详解及acquire方法总结

上篇文章介绍了AQS的设计思想以及独占式获取和释放同步状态的源码分析&#xff0c;但是还不够&#xff0c;一是感觉有点零零散散&#xff0c;二是里面还有很多细节没介绍到——比如cancelAcquire()方法&#xff08;重点&#xff09;&#xff0c;迫于篇幅原因&#xff0c;今天就…

Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用

专栏集锦&#xff0c;大佬们可以收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https:/…

数据的4个等级

除了可以将数据分为定量和定性的&#xff0c;数据还可以分为以下4个等级&#xff0c;每个等级都有不同的控制和数学操作等级&#xff1b; 定类等级&#xff08;nominal level&#xff09; 定序等级&#xff08;ordinal level&#xff09; 定距等级&#xff08;interval level&a…

【CVPR 2023】解读VideoFusion:基于噪声共享机制的视频生成

Diffusion Models视频生成-博客汇总 前言:达摩院开源的VideoFusion是为数不多同时开源模型和推理代码的视频生成工作,通过设计噪声分解机制有效提高视频的时空连贯性,在一些关键指标上远超GAN-based方法和2022年谷歌的VDM。更重要的是,Diffusers库以此为基础,写了关键的两…

同时创建多个websoket(初始化多个连接、断开的重连、每个连接定时发消息、每个连接存储接收的数据(vuex或者pinia))

可复制现成代码直接使用&#xff01;&#xff01; 1.下边的例子演示了创建10个WebSocket 实例&#xff0c;当其中某一个连接失败时&#xff0c;会自动进行重连 <template><div></div> </template><script setup> import { ref, reactive, onMo…

ssh和scp的基本使用

ssh和scp的基本使用 1&#xff0c;ssh 本地连接远程服务器 ssh userhostname第一次连接时输入密码会生成密钥&#xff0c;后续就可以直接连接了 ssh配置文件&#xff1a;/etc/ssh/sshd_config 2&#xff0c;scp 传输本地文件至远程服务器 命令格式 scp [参数] [原路径] […

求二叉树的最大密度(可运行)

最大密度&#xff1a;二叉树节点数值的最大值 如果没有输出结果&#xff0c;一定是建树错误&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 我设置输入的是字符型数据&#xff0c;比较的ASCII值。 输入&#xff1a;FBE###CE### 输…