shell-awk命令详解

news2024/11/18 12:47:30

目录

一.概述

二.工作原理

三.工作流程

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.coloradmin.cn/o/1955584.html

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

相关文章

深入分析 Android ContentProvider (六)

文章目录 深入分析 Android ContentProvider (六)ContentProvider 的性能优化和实践案例&#xff08;续&#xff09;1. 性能优化技巧&#xff08;续&#xff09;1.6. 使用批量插入优化性能示例&#xff1a;批量插入实现 1.7. 使用 Projections 优化查询示例&#xff1a;使用 Pr…

Webpack 从入门到精通

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、Webpack 简介 二、Webpack 的核心概念 三、Webpack 的安装与配置 安装 Node.js 安装 Webpack 初始…

【Linux C | 网络编程】进程池退出的实现详解(五)

上一篇中讲解了在进程池文件传输的过程如何实现零拷贝&#xff0c;具体的方法包括使用mmap&#xff0c;sendfile&#xff0c;splice等等。 【Linux C | 网络编程】进程池零拷贝传输的实现详解&#xff08;四&#xff09; 这篇内容主要讲解进程池如何退出。 1.进程池的简单退…

超越基础功能:项目进度管理工具深度评测

国内外主流的10款项目进度管理网站对比&#xff1a;PingCode、Worktile、滴答清单&#xff08;TickTick&#xff09;、Todoist、NarTick、Teambition、Monday.com、Asana、ClickUp、Trello。 在选择合适的项目进度管理工具时&#xff0c;许多项目经理面临着如何找到既能满足团队…

二十二、作业

目录 1.求代码结果 2.求代码结果 3.使用指针打印数组内容 4.字符串逆序 5.计算求和 6.打印水仙花数 7.打印菱形 8.喝汽水问题 1.求代码结果 输出为00345 2.求代码结果 任何一个变量/表达式&#xff0c;都有2个属性&#xff0c;值属性和类型属性 int a 3&#xff1b;…

Python及Jupyter-Notebook安装

来源&#xff1a; “码农不会写诗”公众号 链接&#xff1a;Python及Jupyter-Notebook安装 文章目录 01 Python安装1.1 下载安装包1.2 双击安装包&#xff0c;开始安装1.3 选择安装配置1.4 选择需要安装的Optional Feature&#xff0c;点击Next1.5 选择需要安装的Advanced Feat…

matplotlib的科研绘图辅助

matplotlib的科研绘图辅助 趁着暑假&#xff0c;与和鲸科技合作了一个python绘图的教程&#xff0c;作为暑期夏令营的一小部分&#xff0c;主要内容是介绍如何使用matplotlib、pandas、seaborn和plotnine进行医学科研绘图&#xff0c;感兴趣的可以通过如下地址进行访问&#x…

Unity XR Interaction Toolkit设置或监听手柄按键事件(三)

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、XRI Default Input Actions1.导入官方案例2.设置控制器绑定&#xff0c;如手柄、主/辅助按钮、操纵杆等1.要设置控制器绑定&#xff0c;如左右手 手柄、主/辅助按钮、操纵杆等…

添加sidecar容器并输出日志

添加一个sidecar容器(使用busybox 镜像)到已有的pod 11-factor-app中,确保sidecar容器能够输出/var/log/11-factor-app.log的信息,使用volume挂载/var/log目录,确保sidecar能访问11-factor-app.log 文件 # 准备工作 创建一个 pod 11-factor-appapiVersion: v1 kind: Pod metada…

【研路导航】保研英语面试高分攻略,助你一路过关斩将

面试攻略之 千锤百炼英语口语 写在前面 在保研面试中&#xff0c;英语口语往往是让许多同学感到头疼的一部分。如何在面试中展现出自信和流利的英语表达能力&#xff0c;是我们今天要探讨的主题。以下是一些有效的英语口语练习方法和常见题型解析&#xff0c;帮助你在保研面试…

GUI - Tkinter - MVC

【python】 property属性详解_python property-CSDN博客Tkinter MVC (pythontutorial.net)GUI架构演进之MVC&#xff08;一&#xff09; - frydsh - 博客园 (cnblogs.com)MVC 模式 | 菜鸟教程 (runoob.com)MVC 架构详解 (freecodecamp.org)Python之MVC - chenbiao - SegmentFau…

灵活数据流处理:NeuronEX 支持 JavaScript 自定义函数

随着数据要素逐渐成为帮助工业企业提升智能化水平的重要助力&#xff0c;如何灵活采集和处理工业数据&#xff0c;并满足用户定制化的数据需求&#xff0c;成为企业数字化建设的焦点之一。 NeuronEX 是一款专为工业场景设计的边缘网关软件&#xff0c;具备工业设备数据采集、工…

@JSONField(format = “yyyyMMddHH“)的作用和使用

JySellerItqrdDataDO对象中的字段为&#xff1a; private Date crdat; 2.数据库中的相应字段为&#xff1a; crdat datetime DEFAULT NULL COMMENT 创建时间,2. 打印出的结果为&#xff1a; “crdat”:“2024072718” 年月日时分秒 3. 可以调整format的格式 4. 这样就把Date类…

信息搜集——小米

小米 主域名&#xff1a;www.miui.com 备案网站&#xff1a;27个 备案APP&#xff1a;21个 备案小程序&#xff1a;13个 备案公众号&#xff1a;23个 备案微博&#xff1a;43个 IP 域名 端口 状态码 Ping 网址 多地ping 网站名称 网址 域名 网站备案/许可证号 公 司名…

手撕数据结构---------顺序表和链表

1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使 ⽤的数据结构&#xff0c;常⻅的线性表&#xff1a;顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0c;也就说是连续的⼀条直…

java实战项目--拼图小游戏(附带全套源代码)

个人主页VON 所属专栏java实战项目游戏参考黑马程序员 一、效果展示 二、功能介绍 游戏中所有的图片以及代码均已打包&#xff0c;玩家直接安装游戏即可&#xff0c;不用idea也可以畅玩。 游戏功能比较单一&#xff0c;只有简单的拼图功能。 a&#xff1a;展示原图重新游戏&a…

初涉JVM

JVM 字节码、类的生命周期、内存区域、垃圾回收 JVM主要功能&#xff1a; 解释运行&#xff08;翻译字节码&#xff09;内存管理&#xff08;GC&#xff09;即使编译&#xff08;Just - In - Time&#xff0c; JIT&#xff09; 将短时间内常使用到的字节码翻译成机器码存储在内…

whaler_通过镜像导出dockerfile

1、Whaler简介 Whaler:从镜像导出Dockerfile&#xff0c;whaler英文释义捕鲸船。 2、下载安装 # wget -cO /usr/local/bin/whaler https://github.com/P3GLEG/Whaler/releases/download/1.0/Whaler_linux_amd64 3、赋予可执行权限 [rootlocalhost ~]# chmod x /usr/local/…

Android OTA刷机包制作学习笔记

前言 OTA是一个再常见不过的需求&#xff0c;Android提供了recovery用于完成相关操作。 常规OTA包制作有两种&#xff1a; 有项目的完整AOSP源码&#xff0c;可以在成构建产物zip包后利用官方脚本制作。具体参阅&#xff1a;Office OTA假设你没有1的条件那么可以利用官方非A/…

exo-tinggrad 架构解析

目录 exo-tinggrad 架构解析 8B 模型配置 70B 模型配置 exo-tinggrad 架构解析 这个项目目录包含了一系列与Python相关的文件和文件夹,它们共同构成了一个可能的项目或库。这些文件和文件夹按照特定的命名和组织方式被放置在了一起,以便于管理、开发和维护。 tinygrad: 这…