Linux文本处理三剑客:awk(常用匹配模式)

news2024/9/23 21:29:18

在Linux操作系统中,grep、sed、awk被称为文本操作“三剑客”,上三期中,我们将详细介绍grep、sed、awk的基本使用方法,希望能够帮助到有需要的朋友。

1、前言

awk作为一门编程语言还有很多内容,我们继续学习awk。

网上有很多教程,讲的都很棒的,但是也讲得很迷糊。

关注我,我也是在摸索中学习,尽量讲清晰一些,希望您在看的过程中,能够有所发现。

首先,上官方手册:Gawk - GNU Project - Free Software Foundation (FSF)

工作流程如下图:BEGIN块开始,循环执行BODY块,最后执行END块。

大家记住这张图,下面我们来讲常用的匹配模式。

主要有以下几种:

  • awk保留字
  • 关系运算符
  • 匹配操作符
  • 正则表达式

2、awk保留字

保留字描述
BEGIN在处理文件之前执行一次的特殊模式。常用于初始化操作,如设置变量、打印标题等。
END在处理文件之后执行一次的特殊模式。常用于收尾工作,如统计结果、输出总结信息等。
NR内置变量,表示当前记录的编号。记录是以换行符分隔的文本行。常用于控制循环或条件判断,如打印第一行或最后一行,或执行基于记录编号的操作。
NF内置变量,表示当前记录的字段数。字段是以空格或制表符分隔的文本列。常用于指定操作的字段数量,如打印指定字段,或执行基于字段数的条件判断。
FS内置变量,表示输入字段分隔符。默认为空格或制表符,可以通过赋值改变其值。常用于处理不同格式的文本文件,如逗号分隔的CSV文件,冒号分隔的passwd文件等。
OFS内置变量,表示输出字段分隔符。默认为与FS相同的值,可以通过赋值改变其值。常用于控制输出格式,如指定输出结果的分隔符。
$0 内置变量,表示当前记录的整体内容。常用于对整行进行操作,如替换、删除、打印等。
$1...$n一组内置变量,分别表示当前记录的各个字段。常用于对指定字段进行操作,如计算、比较、拼接等。

3、关系运算符

关系运算符是指用来比较两个值的大小或相等性的运算符,它们返回一个布尔值(真或假)。awk支持以下关系运算符:

关系运算符描述
==等于
!=不等于
<小于
<=小于等于
>大于
>=大于等于

关系运算符可以用来构造条件表达式,比如筛选出某个范围内的数据,判断某个值是否存在等。

4、匹配操作符

匹配操作符是指用来检查一个值是否匹配一个模式的运算符,它们返回一个布尔值(真或假)。awk支持以下匹配操作符:

- ~匹配
!~不匹配


模式可以是一个字符串或一个正则表达式。匹配操作符可以用来过滤出符合某种规则的数据,比如包含某个关键字,以某个字符开头或结尾等。

5、正则表达式 

元素描述
字符类用方括号括起来的一组字符,表示匹配其中任意一个字符。比如[abc]表示匹配a或b或c。
范围类用方括号括起来的两个字符之间加上连字符,表示匹配该范围内的任意一个字符。比如[a-z]表示匹配小写字母。
反向类在字符类或范围类前面加上^,表示匹配除了该类之外的任意一个字符。比如[^0-9]表示匹配非数字。
预定义类用反斜杠加上一个字母,表示匹配某种类型的字符。比如\d表示匹配数字,\w表示匹配字母或数字或下划线。
量词用花括号括起来的一个或两个数字,表示匹配前面的元素的重复次数。比如a{3}表示匹配三个a,a{2,4}表示匹配两个到四个a。
贪婪量词在量词后面加上?,表示匹配前面的元素的最小重复次数。比如a{2,4}?表示匹配两个a。
通配符用点号.表示匹配任意一个字符(除了换行符)。
边界符用反斜杠加上一个大写字母,表示匹配某种位置。比如\b表示匹配单词边界,\B表示匹配非单词边界。
分组用圆括号括起来的一部分正则表达式,表示将其作为一个整体进行匹配或引用。比如(ab)+表示匹配ab的一次或多次重复,\1表示引用第一个分组的内容。
选择用竖线|分隔的两个或多个正则表达式,表示匹配其中任意一个。比如a|b|c表示匹配a或b或c。

正则表达式可以用来描述各种复杂的文本模式,比如邮箱地址,手机号码,日期格式等。

示例代码:

# 示例代码一:使用awk打印包含特定关键字的行
awk '/关键字/' 文件名

# 示例代码二:使用awk打印第一列等于指定值的行
awk '$1 == "指定值"' 文件名

# 示例代码三:使用awk打印字段数大于等于3的行
awk 'NF >= 3' 文件名

# 示例代码四:使用awk打印以特定字符串开头的行
awk '$0 ~ /^特定字符串/' 文件名

# 示例代码五:使用awk打印指定字段的和
awk '{sum += $1} END {print sum}' 文件名

# 示例代码六:使用awk打印匹配正则表达式的行
awk '/正则表达式/' 文件名

# 示例代码七:使用awk自定义分隔符,并打印指定字段
awk -F ':' '{print $1}' 文件名

# 示例代码八:使用awk在匹配的行前后添加文字
awk '/匹配模式/ {print "前缀" $0 "后缀"}' 文件名

# 示例代码九:使用awk按照指定条件排序
awk '{print $2, $1}' 文件名 | sort

# 示例代码十:使用awk统计特定字段的出现次数
awk '{count[$1]++} END {for (word in count) print word, count[word]}' 文件名

 如果您觉得有些用处,欢迎在评论区留言,关注。谢谢您的阅读!

  往期学习笔记:

Windows系统开启Linux子系统(Ubuntu)

Linux常用命令(目录操作命令)

Linux常用命令:文件的创建、复制、移动、查找和删除命令

Linux常用命令:文本文件的查看与编辑

Linux常用命令:文本文件的拼接与分割

Linux常用命令:文件的权限管理

Linux常用命令:文件的下载、压缩与解压

Linux常用命令:常见的操作符

Linux常用命令:系统操作命令
 

 Linux文本处理三剑客:grep

Linux文本处理三剑客:sed

Linux文本处理三剑客:awk

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

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

相关文章

如何扫码查看企业介绍及填写招聘表?招聘二维码在线生成的方法

现在很多企业会通过生成二维码的方式来做企业介绍以及企业招聘&#xff0c;企业信息通过图片、文字、视频及其他内容展示&#xff0c;再创建合适的表单让扫码者按照制定的内容来填写对应的信息&#xff0c;从而完成扫码招聘的目的。 对于也想采用这种方式的小伙伴&#xff0c;…

自动化测试基础——allure下载安装及配置及pytest + allure-pytest插件生成allure企业级测试报告及企业级定制

文章目录 前言一、allure下载二、allure安装三、allure目录介绍四、allure环境变量配置五、pytest allure-pytest插件生成allure企业级测试报告六、allure企业级报告的log定制七、allure企业级报告功能内容定制1.功能左边层级定制2.功能右边优先级定制3.功能右边测试用例描述定…

【acwing】前缀与差分

前缀和 题目 输入一个长度为 n的整数序列。 接下来再输入 m个询问&#xff0c;每个询问输入一对 l,r。 对于每个询问&#xff0c;输出原序列中从第 l 个数到第 r 个数的和。 输入格式 第一行包含两个整数 n和 m。 第二行包含 n个整数&#xff0c;表示整数数列。 接下来 …

Java基础---lambda表达式

一、为什么要引入lambda表达式 lambda 表达式是一个可传递的代码块 &#xff0c; 可以在以后执行一次或多次 。 在介绍lambda表达式之前&#xff0c;我们看一下&#xff0c;以前&#xff0c;我们对于一个问题的通常写法。 假设你已经了解了如何按指定时间间隔完成工作&#xf…

Window系统部署Splunk Enterprise并结合内网穿透实现远程访问本地服务

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 本文主要介绍如何简单几步&#xff0c;结合cpolar内网穿透工具实现随时随地在任意浏览器&#xff0c;远程访问在本地…

Linux进程间通信4——消息队列

目录 1.原理 2.消息队列的系统调用 2.1 msgget 2.2 msgsnd 2.3 msgrcv 2.4 msgctl 3.消息队列的使用——代码演示 4.结论 1.原理 2.消息队列的系统调用 2.1 msgget 用于创建或者获取一个消息队列。成功返回消息队列ID&#xff0c;失败返回-1。 int msgget(key_t key,…

谷歌seo推广效果怎么判断?

要想判断谷歌SEO推广效果&#xff0c;核心在于观察和分析几个关键指标&#xff0c;一个网站最重要的自然就是流量&#xff0c;没有流量的网站说到底就是一个被雪藏的花架子&#xff0c;没什么意义&#xff0c;所以看流量自然就是最重要的指标&#xff0c;SEO做得好&#xff0c;…

【力扣白嫖日记】626.换座位

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 626.换座位 表&#xff1a;Seat 列名类型idintstudentvarchar id 是该表的主键&#xff08;唯一值&#xf…

深入 Starknet 去中心化世界,探秘实用开发利器

Starknet 近期开放空投&#xff0c;面向 130 万地址总量发放超 7 亿枚 Token&#xff0c;让 ECMP 早期贡献者、GitHub 开源开发者、Starknet 用户等各个层面的生态参与者都得以深度参与。 盛宴的背后&#xff0c;是 Starknet 正迎来发展的关键机遇。在今年以太坊坎昆升级的背景…

绕过付费,畅享网络:自由浏览付费内容 | 开源日报 No.185

iamadamdev/bypass-paywalls-chrome Stars: 38.8k License: NOASSERTION bypass-paywalls-chrome 是一个用于 Chrome 和 Firefox 的网页浏览器扩展&#xff0c;可帮助绕过特定网站的付费墙。 可以绕过多个指定网站的付费墙支持自动更新&#xff08;仅限 Firefox 版本&#x…

10.轮廓系数-机器学习模型性能的常用的评估指标

轮廓系数&#xff08;Silhouette Coefficient&#xff09;是评估聚类算法效果的常用指标之一。它结合了聚类的凝聚度&#xff08;Cohesion&#xff09;和分离度&#xff08;Separation&#xff09;&#xff0c;能够量化聚类结果的紧密度和分离度。 背景 1.聚类分析的背景 在…

武汉灰京文化:游戏推广的领军者

在当今飞速发展的游戏行业中&#xff0c;游戏推广成为了每个游戏开发商和发行商必然要面对的挑战。如何能够将游戏信息传播给更广泛的受众群体&#xff0c;提升游戏的知名度和用户参与度&#xff0c;成为了每个游戏从业者需要思考的问题。而武汉灰京文化作为游戏推广领域的领军…

指定新加坡|高职老师自费赴新加坡国立大学访学交流

K老师任职于某高职院校&#xff0c;希望通过自费出国访学&#xff0c;达到拓宽国际化视野&#xff0c;为本校的专业发展寻求新契机的目的&#xff0c;并将访学目标国家指定为新加坡。最终我们为其获得新加坡国立大学的邀请函。因交叉性、前沿性的专业特性&#xff0c;K老师的出…

STM32CubeIDE基础学习-软件安装,环境搭建

STM32CubeIDE基础学习-软件介绍及环境搭建步骤 文章目录 STM32CubeIDE基础学习-软件介绍及环境搭建步骤前言第1章 STM32CubeIDE 介绍1.1 软件描述1.2 软件支持的功能及特点 第2章 STM32CubeIDE 软件安装2.1 STM32CubeIDE 软件获取方法2.2 STM32CubeIDE 软件安装步骤2.2.1 错误安…

一些C语言知识

C语言的内置类型&#xff1a; char short int long float double C99中引入了bool类型&#xff0c;用来表示真假的变量类型&#xff0c;包含true&#xff0c;false。 这个代码的执行结果是什么&#xff1f;好好想想哦&#xff0c;坑挺多的。 #include <stdio.h>int mai…

《精益DevOps》:填补IT服务交付的认知差距,实现高效可靠的客户期望满足

写在前面 在当今的商业环境中&#xff0c;IT服务交付已经成为企业成功的关键因素之一。然而&#xff0c;实现高效、可靠、安全且符合客户期望的IT服务交付却是一项艰巨的任务。这要求服务提供商不仅具备先进的技术能力&#xff0c;还需要拥有出色的组织协作、流程管理和态势感…

(2024,随机交叉注意力,冻结预训练模型的 K 和 V)StochCA:一种利用交叉注意力开发预训练模型的新方法

StochCA: A Novel Approach for Exploiting Pretrained Models with Cross-Attention 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 方法 3.1 问题陈述 3.1.1 迁移学习 …

LeetCode206题:反转链表(python3)

采用递归 class Solution:def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:cur headpre Nonewhile cur:temp cur.next # 保存下一轮循环的节点cur.next pre # 将当前节点 cur 的指针指向上一个节点 prepre curcur tempreturn pre

Network LSA 结构简述

Network LSA主要用于描述一个区域内的网络拓扑结构&#xff0c;包括网络中的路由器和连接到这些路由器的网络。它记录了每个路由器的邻居关系、连接状态以及连接的度量值&#xff08;如带宽、延迟等&#xff09;&#xff0c;以便计算最短路径和构建路由表。display ospf lsdb n…

08. Nginx进阶-Nginx动静分离

简介 什么是动静分离&#xff1f; 通过中间件将动态请求和静态请求进行分离。分离资源&#xff0c;减少不必要的请求消耗&#xff0c;减少请求延时。 动静分离的好处 动静分离以后&#xff0c;即使动态服务不可用&#xff0c;静态资源仍不受影响。 动静分离示意图 动静分离…