shell-awk命令详解

目录

一.概述

二.工作原理

三.工作流程

1.运行模式

2.运行流程

四.基本语法

1.命令格式

2.常用变量 

五.变量类型

1.内建变量

2.内置变量

3.BEGIN END运算 

4.awk高级用法

5.awk if语句

6.BEGIN END循环


一.概述

AWK是一种处理文本文件的语言,是一个强大的文件分析工具。

它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描,过滤,统计汇总等工作,数据可以来自标准输入也可以是管道或文件。

二.工作原理

逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个"字段",然后再进行处理。

awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符"&&“表示"与”、"||'表示"或"、"!“表示"非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方

三.工作流程

  1. 读取数据:awk从指定的数据文件中逐行读取文本数据。
  2. 更新内置变量:在读取数据的过程中,awk会自动更新其内置的系统变量,如列数变量‌NF、行数变量NR、当前行0以及各个列变量0以及各个列变量0以及各个列变量1、$2等。
  3. 执行匹配模式及其操作:对于每一行数据,awk会检查是否有匹配的模式(pattern)及其对应的操作(actions)。如果匹配成功,则执行相应的操作。如果没有指定模式,则默认对所有行执行操作;如果没有指定操作,则默认输出匹配的行。
  4. 重复处理:当一行数据处理完毕后,如果数据文件中还有未读取的数据行,awk会返回到第一步,继续读取和处理下一行数据,直到所有数据都被处理完毕。

此外,awk还支持‌BEGIN和END语句块,BEGIN语句块在开始处理数据前执行,通常用于初始化变量或执行一些预处理操作;END语句块在处理完所有数据后执行,通常用于汇总结果或进行最后的处理

1.运行模式

(1)、正则表达式

(2)、关系表达式

(3)、组合的Pattern

  (4)  、Pattern1,Pattern2

  (5)  、BEGIN

  (6)  、END

2.运行流程

       首先,awk的基本语法为 awk ‘pattern{actions}’,其中pattern代表匹配模式,actions表示要执行的操作,pattern和actions都是可选的,但是两者必须至少有一个;

       工作流程:(反复执行4个步骤) 1、自动从指定的数据文件中读取行文本 2、自动更新awk的内置系统变量的值,例如列数变量NF、行数变量NR、行变量$0以及各个列变量$1、$2等 3、依次执行程序中所有的匹配模式及其操作 4、当执行完程序中所有的匹配模式及其操作之后,如果数据文件中仍然还有未读取的数据行,则返回到第1步,重复执行1-4的操作。

awk程序结构:

  • 开始块:BEGIN BLOCK
  • 主体块:Body block
  • 结束块:END block

 

四.基本语法

1.命令格式

awk 选项 '模式或条件 {操作}' 文件 1 文件 2 …
awk -f 脚本文件 文件 1 文件 2 …


2.常用变量 

  • FS:指定每行文本的字段分隔符,默认为空格或制表位。
  • NF:当前处理的行的字段个数。在执行过程中对应于当前的字段数,NF:列的个数
  • NR:当前处理的行的行号(序数)。 在执行过程中对应于当前的行号
  • $0:当前处理的行的整行内容。
  • $n:当前处理行的第 n 个字段(第 n 列)。比如: $1 表示第一个字段,$2 表示第二个字段
  • FILENAME:被处理的文件名(当前输入文件的名)。
  • FNR 各文件分别计数的行号
  • OFS 输出字段分隔符(默认值是一个空格)
  • ORS 输出记录分隔符(默认值是一个换行符)
  • RS:行分隔符。awk从文件上读取资料时,将根据Rs的定义把资料切割成许多条记录, 而awk一次仅读入一条记录,以进行处理。预设值是" \n'
  • 简说:数据记录分隔,默认为\n,即每行为一条记录

五.变量类型

1.内建变量

  • FS:指定每行文本的字段分隔符,默认为空格或制表位。
  • NF:当前处理的行的字段个数。在执行过程中对应于当前的字段数,NF:列的个数
  • NR:当前处理的行的行号(序数)。 在执行过程中对应于当前的行号
  • $0:当前处理的行的整行内容。
  • $n:当前处理行的第 n 个字段(第 n 列)。比如: $1 表示第一个字段,$2 表示第二个字段
  • FILENAME:被处理的文件名(当前输入文件的名)。
  • FNR 各文件分别计数的行号
  • OFS 输出字段分隔符(默认值是一个空格)
  • ORS 输出记录分隔符(默认值是一个换行符)
  • RS:行分隔符。awk从文件上读取资料时,将根据Rs的定义把资料切割成许多条记录, 而awk一次仅读入一条记录,以进行处理。预设值是" \n'

(1)'print'案例

以[:/]为分隔符打印出第九列

2.内置变量

  • awk常用内置变量:$1、$2、NF、NR、$0
  • $1:代表第一列
  • $2:代表第二列以此类推
  • $0:代表整行
  • NF:一行的列数
  • NR:行数

打印出含有root的整行内容 

打印出含有root的行数的第一列 

打印出每一行的行号和内容

3.BEGIN END运算

  • 逐行执行开始之前执行什么任务,结束之后再执行什么任务,用BEGIN、END
  • BEGIN一般用来做初始化操作,仅在读取数据记录之前执行一次
  • END一般用来做汇总操作,仅在读取完数据记录之后执行一次

awk -F: '$1=="root"' /etc/passwd

其他内置变量的用法 FS (输入)、 OFS NR FNR RS ORS
FS :输入字段的分隔符 默认是空格
OFS :输出字段的分隔符 默认也是空格
FNR :读取文件的记录数(行号),从 1 开始,新的文件重新重 1 开始计数
RS :输入行分隔符 默认为换行符
ORS :输出行分隔符 默认也是为换行符

awk 'BEGIN{FS=":"}{print $1}' pass.txt // 在打印之前定义字段
分隔符为冒号

awk 'BEGIN{FS=":";OFS="---"}{print $1,$2}' pass.txt
#OFS 定义了输出时以什么分隔, $1$2 中间要用逗号分隔,因为逗号默认被映射为 OFS 变量,而这个变量默认是
空格

4.awk高级用法

定义引用变量

seq 10 | awk '{getline;print $0}'  显示偶数行

seq 10 | awk '{print $0;getline}'  显示奇数行

5.awk if 语句

awk -F: '{if($3<10){print $0}}' /etc/wjh // 第三列小于 10
打印整行

awk -F: '{if($3<10){print $3}else{print $1}}' /etc/wjh 
// 第三列小于 10 的打印第三列,否则打印第一列

6.BEGIN END 流程

  • awk还支持for循环、while循环、函数、数组等 其他
  • awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
  • 第一步:运行BEGIN{ commands }语句块中的语句。
  • 第二步:从文件或标准输入(stdin)读取一行。然后运行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行反复这个过程。直到文件所有被读取完成。
  • 第三步:当读至输入流末尾时,运行END{ commands }语句块。
  • BEGIN语句块在awk开始从输入流中读取行之前被运行,这是一个可选的语句块,比方变量初始化、打印输出表格的表头等语句通常能够写在BEGIN语句块中。
  • END语句块在awk从输入流中读取全然部的行之后即被运行。比方打印全部行的分析结果这类信息汇总 都是在END语句块中完毕,它也是一个可选语句块。
  • pattern语句块中的通用命令是最重要的部分,它也是可选的。假设没有提供pattern语句块,则默认运
  • { print },即打印每个读取到的行。awk读取的每一行都会运行该语句块。
[root@localhost ~] #awk 'BEGIN{x=0};/\/bin\/bash$/ {x++;print x,$0};END {print
x}' /etc/passwd
# 统计以 / bin/bash 结尾的行数,等同于
[root@localhost ~] #grep -c "/bin/bash$" /etc/passwd
[root@localhost ~] #awk 'BEGIN {FS=":"} ;{if($3>=1000){print}}' /etc/passwd
# 先处理完 BEGIN 的内容,再打印文本里面的内容
# 输出第 7 个字段既不为 /bin/bash ,也不为 /sbin/nologin 的所有行
[root@localhost ~] #awk -F: '($NF !=" /bin/bash")&&($NF !=" /sbin/nologin" )
{print NR, $0}' passwd
通过管道、双引号调用 shell 命令 :
[root@localhost ~] #echo $PATH | awk 'BEGIN{RS=":"};END {print NR}'
# 统计以冒号分隔的文本段落数, END{ } 语句块中,往往会放入打印结果等语句
[root@localhost ~] #echo $PATH | awk 'BEGIN{RS=":"};{print NR,$0};END {print NR}'
[root@localhost ~] #awk -F: '/bash$/{print | "wc -l"}' /etc/passwd
# 调用 wc -l 命令统计使用 bash 的用户个数 , 等同于 grep -c "bash$" etc/passwd
[root@localhost ~] #awk -F: '/bash$/ {print}' /etc/passwd | wc -l
[root@localhost ~] #free -m |awk '/Mem:/ {print int($3/($3+$4)*100)"%"}' # 查看当
前内存使用百分比

 

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

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

相关文章

2024世界技能大赛某省选拔赛“网络安全项目”B模块--操作系统取证解析

2024世界技能大赛某省选拔赛“网络安全项目”B模块--操作系统取证解析 任务一、操作系统取证解析:总结:任务一、操作系统取证解析: A 集团某电脑系统被恶意份子攻击并控制,怀疑其执行了破坏操作,窃取了集团内部的敏感信息,现请分析 A 集团提供的系统镜像和内存镜像,找到…

国产大模型的逆袭:技术路径的策略与实践

〔探索AI的无限可能&#xff0c;微信关注“AIGCmagic”公众号&#xff0c;让AIGC科技点亮生活〕 一.聚焦长文本&#xff0c;国产大模型已有赶超GPT之势 1.1 理科能力差距较大&#xff0c;注重文科能力的提升 整体比较而言&#xff0c;国内大模型与GPT-4&#xff08;官网&…

树与二叉树【数据结构】

前言 之前我们已经学习过了各种线性的数据结构&#xff0c;顺序表、链表、栈、队列&#xff0c;现在我们一起来了解一下一种非线性的结构----树 1.树的结构和概念 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一…

【计算机网络】ICMP报文实验

一&#xff1a;实验目的 1&#xff1a;掌握ICMP报文的各种类型及其代码。 2&#xff1a;掌握ICMP报文的格式。 3&#xff1a;深入理解TTL的含义&#xff08;Time to Live&#xff0c;生存时间&#xff09;。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a;RCMS-C服务器…

等级保护测评解决方案

什么是等级保护测评&#xff1f; 网络安全等级保护是指对国家重要信息、法人和其他组织及公民的专有信息以及公开信息和存储、传输、处理这些信息的信息系统分等级实行安全保护&#xff0c;对信息系统中使用的信息安全产品实行按等级管理&#xff0c;对信息系统中发生的信息安全…

小模型狂飙!6家巨头争相发布小模型,Andrej Karpathy:大语言模型的尺寸竞争正在倒退...

过去一周&#xff0c;可谓是小模型战场最疯狂的一周&#xff0c;商业巨头改变赛道&#xff0c;向大模型say byebye~。 OpenAI、Apple、Mistral等“百花齐放”&#xff0c;纷纷带着自家性能优越的轻量化小模型入场。 小模型(SLM)&#xff0c;是相对于大语言模型&#xff08;LLM…

Istio 学习笔记

Istio 学习笔记 作者&#xff1a;王珂 邮箱&#xff1a;49186456qq.com 文章目录 Istio 学习笔记[TOC] 前言一、基本概念1.1 Istio定义 二、Istio的安装2.1 通过Istioctl安装2.2 通过Helm安装 三、Istio组件3.1 Gateway3.2 VirtulService3.2.1 route详解3.2.2 match详解3.2.3…

【前端 02】新浪新闻项目-初步使用CSS来排版

在今天的博文中&#xff0c;我们将围绕“新浪新闻”项目&#xff0c;深入探讨HTML和CSS在网页制作中的基础应用。通过具体实例&#xff0c;我们将学习如何设置图片、标题、超链接以及文本排版&#xff0c;同时了解CSS的引入方式和选择器优先级&#xff0c;以及视频和音频标签的…

【Gin】智慧架构的巧妙砌筑:Gin框架中控制反转与依赖注入模式的精华解析与应用实战(下)

【Gin】智慧架构的巧妙砌筑&#xff1a;Gin框架中控制反转与依赖注入模式的精华解析与应用实战(下) 大家好 我是寸铁&#x1f44a; 【Gin】智慧架构的巧妙砌筑&#xff1a;Gin框架中控制反转与依赖注入模式的精华解析与应用实战(下)✨ 喜欢的小伙伴可以点点关注 &#x1f49d; …

怀旧必玩!重返童年,扫雷游戏再度登场!

Python提供了一个标准的GUI&#xff08;图形用户界面&#xff09;工具包&#xff1a;Tkinter。它可以用来创建各种窗口、按钮、标签、文本框等图形界面组件。 而且Tkinter 是 Python 自带的库&#xff0c;无需额外安装。 Now&#xff0c;让我们一起来回味一下扫雷小游戏吧 扫…

快速搞定分布式RabbitMQ---RabbitMQ进阶与实战

本篇内容是本人精心整理&#xff1b;主要讲述RabbitMQ的核心特性&#xff1b;RabbitMQ的环境搭建与控制台的详解&#xff1b;RabbitMQ的核心API&#xff1b;RabbitMQ的高级特性;RabbitMQ集群的搭建&#xff1b;还会做RabbitMQ和Springboot的整合&#xff1b;内容会比较多&#…

【C++】C++入门知识(上)

好久不见&#xff0c;本篇介绍一些C的基础&#xff0c;没有特别的主题&#xff0c;话不多说&#xff0c;直接开始。 1.C的第一个程序 C中需要把定义文件代码后缀改为 .cpp 我们在 test.cpp 中来看下面程序 #include <stdio.h> int main() {printf("hello world\n…

SQL Server 设置端口号:详细步骤与注意事项

目录 一、了解SQL Server端口号的基础知识 1.1 默认端口号 1.2 静态端口与动态端口 二、使用SQL Server配置管理器设置端口号 2.1 打开SQL Server配置管理器 2.2 定位到SQL Server网络配置 2.3 修改TCP/IP属性 2.4 重启SQL Server服务 三、注意事项 3.1 防火墙设置 3…

Java小抄|Java中的List与Map转换

文章目录 1 List<User> 转Map<User.id,User>2 基础类型的转换&#xff1a;List < Long> 转 Map<Long,Long> 1 List 转Map<User.id,User> Map<Long, User> userMap userList.stream().collect(Collectors.toMap(User::getId, v -> v, …

p28 vs环境-C语言实用调试技巧

int main() { int i0; for(i0;i<100;i) { printf("%d",i); } } 1.Debug 和Release的介绍 Debug通常称为调试版本&#xff0c;它包含调试信息&#xff0c;并且不做任何优化&#xff0c;便于程序员调试程序。 Release称为发布版本&#x…

PTPD 在 QNX 系统上的授时精度验证与误差排查

文章目录 0. 引言1.关键函数实现2. 验证策略与结果3. 授时误差的排查与解决3. 授时误差的排查与解决4. 结论 0. 引言 PTPD是一种时间同步的开源实现&#xff0c;在不同操作系统上的表现可能存在显著差异。 本文通过在QNX系统上运行PTPD&#xff0c;针对其授时精度进行详细验证…

探索算法系列 - 双指针

目录 移动零&#xff08;原题链接&#xff09; 复写零&#xff08;原题链接&#xff09; 快乐数&#xff08;原题链接&#xff09; 盛最多水的容器&#xff08;原题链接&#xff09; 有效三角形的个数&#xff08;原题链接&#xff09; 查找总价格为目标值的两个商品&…

优化算法:2.粒子群算法(PSO)及Python实现

一、定义 粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;PSO&#xff09;是一种模拟鸟群觅食行为的优化算法。想象一群鸟在寻找食物&#xff0c;每只鸟都在尝试找到食物最多的位置。它们通过互相交流信息&#xff0c;逐渐向食物最多的地方聚集。PSO就是基于这…

【python_将一个列表中的几个字典改成二维列表,并删除不需要的列】

def 将一个列表中的几个字典改成二维列表(original_list,headersToRemove_list):# 初始化一个列表用于存储遇到的键&#xff0c;保持顺序ordered_keys []# 遍历data中的每个字典&#xff0c;添加其键到ordered_keys&#xff0c;如果该键还未被添加for d in original_list:for …

P4009 汽车加油行驶问题题解

P4009 汽车加油行驶问题 紫题&#xff0c;但是DFS。 思路 记忆化搜索&#xff0c;分多钟情况去搜索。 注意该题不用标记&#xff0c;有可能会往回走。 有可能这样走。 代码 #include<bits/stdc.h> #include<cstring> #include<queue> #include<set&g…