首页 > 其他分享 >awk工具的主要作用在显示数据上。

awk工具的主要作用在显示数据上。

时间:2024-10-24 15:17:06浏览次数:6  
标签:awk 数组 使用 所示 如上图 工具 数据

一.awk工具介绍

作用:

能够按照特定的条件在文件中搜索数据,按照特定的格式进行显示。

$0代表当前处理的整行内容,$1代表第一个数据

awk在处理文本数据的时候也是逐行处理数据

工作流程:默认按照空白字符分割文本,将文本分成多部分,在awk内部有类似$1变量用于代表第一部分内容,$2代笔第二部分,依次类推,$0表示整行文本

逐行处理工具。

-F选项:用来指定分割符号

1.awk使用格式

这个使用格式的意思就是我要使用awk如何显示文件中符合条件的内容。

即使用awk工具使用什么样的格式和操作去显示文件中的内容。

符合什么条件的一行数据,如何显示一行符合条件的数据。

pattern:特定的条件,来从文件中过滤数据。【这个如果不写,就表示着awk工具要去处理文件中的每一行数据。】

action:特定的格式,将过滤出的数据以特定的格式来显示数据。

(print)

(printf)

都是显示的意思,就是使用格式有所不同。

二.action 操作

1.print显示操作

如上图所示,就是将/etc/passwd文件中的第二行通过p参数显示到显示器上,然后就是使用awk工具对符合条件的文件行数,提取第三个数据,和第6个数据的操作,$0表示整行文件内容。

如上图所示,输出的内容默认是以空格来进行数据的分割的。

[root@es-master ~]# sed -n '1p' /etc/passwd | awk -F: '{print $3","$6}'

如上所示,如果想按照英文逗号分隔数据,就还要使用英文引号将两个$3和$6给引起来。

如上图所示,第一行输出第六个数据,第二行同样输出第六个数据。

然后可以根据我们的需要在大括号中去写我们需要的内容,

不管是中文的内容还是英文的内容,但凡是自己想输出的内容,都需要用引号将内容引起来。

然后可以根据我们的需要在大括号中去写我们需要的内容,

不管是中文的内容还是英文的内容,但凡是自己想输出的内容,都需要用引号将内容引起来。并且要和其他的内容用英文逗号给隔开。

如上图所示,这是使用awk工具去将我们想要的数据进行标识的操作。

如上图所示,这是使用awk工具通过自定义输出的字符串数据,然后将输出的字符串数据交给bash去执行的统一卸载软件的操作。

如上图所示,这也是通过awk工具将字符串数据的输出进行自定义,同时将自定义的字符串数据交给bash去执行。

2.printf   格式化输出内容(支持我们给输出的内容设置格式,主要目的就是为了让输出的内容更整齐一些。)

使用格式:

printf  “格式”,内容1,内容2,内容3

格式的写法:

1.占位符{用来给数据占位置的符号}

%s   字符串数据

%8s标识以右对齐的方式显示字符串数据

%-8s标识以左对齐的方式显示字符串数据

%d  整数

%f  浮点数,小数

如上图所示,就是printf的一个基本使用,即使用%s来重定义数据的输出格式。

如上图所示,这是在awk工具中使用%9s进行右对齐的方式,来格式化字符串的输出

在awk工具中使用%-9s进行左对齐的方式,来格式化字符串的输出。

如上图所示,在这个awk工具的使用中默认以在8个字符的范围之内以右对齐的方式显示字符,

如上图所示,这是在10个字符的范围之内以左对齐的方式显示字符。

在输出结果上看print和printf从输出结果上看有什么区别?

如上图所示,在awk工具中使用print输出结果之后会默认有一个换行,但是printf输出结果之后默认不会有一个换行。

如上图所示,当使用printf输出多行内容的时候,需要注意手动添加换行符\n

如上图所示,手动添加换行符\n

如上图所示,是使用df -hT命令的使用结果。

如上图所示,是分别使用print和printf输出字符串数据的比较。

3.在Linux操作系统中的awk工具中print和printf的主要区别是什么?

三.awk变量的使用

典型:

自定义变量

内置变量(awk内部自带的内置变量)

自定义变量

方法1:

-v  变量名称=值

调用变量的时候,直接写变量名称就可以了。

如上图所示,是使用awk自定义变量并使用变量的一个演示。

如上图所示,BEGIN的意思是awk在真正读取文件内容之前做什么事情。

即在真正读取文件内容之前打印输出字符串hello 并且读取输出变量name中的值。

BEGIN{}这里的是awk工具中的一个特殊的模式,含义是在真正读取文件内容之前做什么操作。

完整的应该是BEGIN{}{action}其中BEGIN{}含义是在真正读取文件内容之前做什么操作。

而{action}就是对文件内容进行的操作了。

如上图所示,这个表示的是在真正读取文件内容之前,所做的操作是打印输出hello 引用变量name的变量值并且打印输出,打印输出My Age is ,引用变量age的值并且打印输出。

方法2:

在BEGIN{}模式中定义

如上图所示,这是在awk工具的BEGIN{}模式中自定义变量的一种方式。

2.内置变量中最常用的就是NR表示行号,还有NF表示一行文本数据被分隔成几段。

1)FS,OFS

FS变量:

作用与-F选项一致,

awk读取文本时指定行分隔符,默认是空白。

如上图所示,-F选型和FS变量的作用是一样的都是读取文本的时候指定行分隔符。用哪个都行。

OFS变量

指定awk在输出多行内容时的分隔符,默认是空白。

如上图所示,这是在指定在使用awk工具输出多行内容的时候,中间的分隔符是什么。

2)NR,FNR

记录awk读取文本时的行号的。主要应用于在awk工具处理多文件内容时候。

区别:NR变量,awk在处理多个文件时,所有文件的行号是统一记录的。

FNR变量,awk在处理多个文件时,所有文件的行号是单独记录的。

如上图所示,这是在使用awk工具中内置变量NR与FNR时候的区别,当使用这两个内置变量的时候去处理单个文件的时候,其表现出来的结果是一样的,但是当使用这两个内置变量去处理多个文件的时候,其表现的结果就是不一样的了,NR是将多个文件中的行数,进行一个统一记录,最后的结果是两个文件中文件内容的总行数,FNR是将多个文件中的行数单独记录。

如上图所示,我现在有一个需求要求将文件中以\开头的文件内容都显示到屏幕上,并且显示出这些文件内容的行号。

如上图所示,这是将文件中的第三行内容显示到屏幕上。

从处理文本数据的三剑客:grep,sed,awk,熟练使用sed的比只使用grep的厉害,熟练使用awk的比只使用grep的更厉害。

3)NF

记录awk分隔文本时,被分割的段数。

如上图所示,这个NF变量记录的是文本数据中的一行数据被awk工具所分隔的段数。

如上图所示,这个NF变量记录的是文本数据中的一行数据被awk工具所分隔的段数。

如上图所示,NF还可以作为变量去储存awk工具分隔一行文本数据中的最后一段数据。

此时在awk工具中使用$NF的方式还可以去调用这个变量的值。也就是文本数据中的最后一段数据。

如上图所示,这里使用NF变量不仅可以知道这个文件中每一行,被分割成几段数据,还可以直接通过变量NF来获取到这个文件中每一行文本数据的最后一段数据,作为NF的变量值。

在awk中需要使用$符号才可以调用变量NF的值。

awk的使用格式来说模式的写法,这个模式也可以称为awk的条件。

四.pattern的写法即模式(条件)的写法

使用awk工具的时候模式可以不写但是此时awk默认就是处理的文件中的所有内容。

1.表达式

需求:我现在想列出uid小于等于10的用户的用户名

如上图所示,实现具体需求。‘

需求:获取所有的系统用户

如上图所示,实现具体需求。

需求:我想列出系统磁盘中以/开头的磁盘分区,并且列出磁盘分区使用率大于百分之25的磁盘分区名称。

如上图所示,实现具体需求。

需求:过滤出shell程序为/sbin/nologin的用户名

如上图所示,这两条命令可以实现相同的结果。

2./正则表达式/

如上图所示,想要获取当前操作系统中以tcp开头的协议,可以使用grep "^tcp"这样就能过滤出以tcp开头的端口。也可以使用sed '1,2d'这样就是把前面netstat -antp的结果交给sed '1,2d'来删除前两行。

如上图所示,也可以使用awk工具此时使用^tcp来过滤出所有以tcp开头的行,并将这些行交给print 去打印输出命令本身,此时也可以实现打印输出以tcp协议启动的端口。

接下来使用awk工具去获取r或者s开头的用户名

如上图所示,就是使用awk工具去获取/etc/passwd文件中所有以r或者s开头的用户名

3./正则表达式1/,/正则表达式2/

使用awk工具获取文件中正则表达式1与正则表达式2之间的所有数据。

如上图所示,这就表示在日志文件获取我们需求时间段中的所有日志信息。

4.BEGIN{}{action}【其中BEGIN表示的意思是让awk在真正处理文件内容之前,先干什么事。】

比如说在处理文件内容之前打印一个表头。

如上图所示,是在awk处理文件内容之前去进行一个打印表头的操作。

5.END{}文件所有数据处理完毕后执行的操作

如上图所示,这就是END{}即在awk工具处理完文件中所有数据之后才会执行的操作。

五.action操作--逻辑控制语句

1.条件判断

语法:

if(条件) {条件为真执行的操作}

if(条件){条件为真执行的操作} else{条件为假执行的操作}

if(条件) {条件为真执行的操作}  else  if(条件){条件为真执行的操作}

需求:判断用户是管理员还是普通用户,如果是管理员就打印输出管理员,如果是普通用户就打印输出普通用户。

如上图所示,这是在awk工具中使用if判断的示例。

需求:统计我用户中的shell是/bin/bash的有几个,shell是/sbin/nologin的有几个

基本思路是定义两个变量,如果shell是/bin/bash。就对应的变量中的数值加一,如果是shell是/sbin/nologin,就对应的变量中的数值加一。

这个需求使用脚本中的循环没有问题,也可以使用awk搞定。

如上图所示,这就是使用awk工具中的if判断实现的。

需求:显示系统中磁盘使用率大于百分之20的磁盘的信息。

如上图所示,这是使用awk工具中的条件判断实现的列出系统磁盘中使用率大于百分之20的磁盘信息。

2.for循环

如上图所示,请问awk循环的目的是否就是依次处理文件中符合条件的每一行的内容?

这个说法是错误的,因为awk工具本身就是一个依次处理符合条件的每一行数据的工具。

awk循环的目的,就是处理一行数据中分隔出来的每一段数据

语法:for(变量的定义:循环条件;改变循环条件真假的语句){执行的操作}

这就是一个执行10次的循环,这个就是for循环的一个基本语法。

break直接结束循环

continue直接跳出本次循环,执行下一次循环。

awk中提供的函数length()这个的意思是统计字符串的字符个数。

如上图所示,结合着awk本身的length()函数再加上for循环的工具去依次处理一行数据的每一段内容。将符合条件的一段数据内容进行输出。

如上图所示,这是将文件中符合条件的一行数据中的一段数据给输出打印。也就是说这里的循环操作是去处理文件内容中的每一段数据,知道将所有符合条件的文件中的每一段数据都打印出来之后,循环结束。

六.awk数组的使用

定义:开辟一段连续的内存空间,可以保存多个数据。

在shell程序中的数组中元素的下标默认是从0开始,即数组中第一个元素的下标是0

在awk工具中对于在awk工具中使用的数组,数组中的元素的下标是从1开始的。即awk数组中的第一个元素的下标是1.

1.在awk中定义数组

如上图所示,这就是在awk工具中定义了一个数组·,这个数组名称是test,这个test数组中第一个元素是10.1.1.1第二个元素是10.1.1.2第三个元素是10.1.1.3

2.获取单个数据

如上图所示,这是如何在一个数组中获取数据的操作,即使用print 数组名称[下标]

 当你试图从数组中获取一个不存在数据的时候,会获得一个空值。

3.获取数组中的所有数据可以通过for循环,来遍历这个数组,从而拿到这个数组中所有的数据

如上图所示,这是使用for循环来遍历数组中所有元素的方式,来获取数组中所有的值,

这里也可以使用length(test)来获取这个数组中元素的个数。

4.awk中的数组支持使用任何数据来作为下标来使用。

如上图所示,在awk中的数组中可以使用任何数据来作为元素的下标来使用。

5.遍历数组

如上图所示,这是面对awk数组中,元素下标不是单纯数组的情况,可以在for循环中使用for (变量名 in 数组名) 来获取数组中元素的下标,但是想要输出数组中元素的值,就需要使用print test[i]来输出打印awk数组test中的元素的值。

如上图所示,这是实现需求,打印输出数组中每个用户的姓名和住址的操作。

使用awk中的数组主要就是使用awk中数组下标可以是任何数据这样一个特性。

6.awk数组应用

1)统计各shell的次数

下标就是shell名,这个下标对应的数字就是这个下标出现的次数。

如上图所示,这个就是实现需求即实现统计各个shell程序出现的次数。

如上图所示,的这个awk命令可以用来统计文件中各段数据的出现次数。

即每一行文件内容就是一个数组,每一行数据中的统计数据为下标,以统计数据的出现次数为下标对应的元素。当这个统计数据出现一次的时候,这个下标对应的元素就加一。

2)统计tcp协议的各状态的次数

即每一行文件内容就是一个数组,每一行数据中的统计数据为下标,以统计数据的出现次数为下标对应的元素。当这个统计数据出现一次的时候,这个下标对应的元素就加一。

3)统计web日志的UV量。

不同的服务,都有属于自己的访问日志,这些访问日志记录着哪些客户端什么时间访问过我。

这个访问日志中有两个指标,是运维必须要会统计的。

UV即用户访问量即统计服务访问日志中各个客户端IP地址出现的次数,就是用户访问量。

PV即页面访问量

如上图所示,这就是阿帕奇服务的访问日志,中的信息。

如上图所示,这就是客户端访问日志中的内容。

具体思路就是使用awk工具来进行切割每一行数据,将每一行数据的IP地址作为awk数组中的下标,将客户端IP地址出现的次数作为这个数组中元素下标所对应的元素。

如上图所示,这个结果就是用户访问量,就是这个服务的UV量。

如上图所示,这是将统计结果进行排序。目的是更加直观的看出这个服务的UV量。

如上图所示,这是在查看这个httpd服务的访问日志的最后10行内容。

如上图所示,这就是这个httpd服务的PV量,

标签:awk,数组,使用,所示,如上图,工具,数据
From: https://blog.csdn.net/ZHX2285/article/details/143097919

相关文章

  • 用友BIP数据集成到旺店通·企业奇门:YS其他入库单对接方案
    用友BIP数据集成到旺店通·企业奇门:YS其他入库单对接方案在企业的日常运营中,数据的高效流转和准确处理至关重要。本文将分享一个具体的系统对接集成案例,即如何将用友BIP平台上的YS其他入库单数据无缝对接到旺店通·企业奇门,实现云仓管理中的高效数据同步。本次集成方案名为“YS......
  • 吉客云数据集成到金蝶云星空:盘盈入库单对接方案
    吉客云数据集成到金蝶云星空:盘盈入库单对接方案在企业资源管理中,数据的准确性和实时性至关重要。本文将分享一个具体的系统对接集成案例,即如何将吉客云中的盘盈入库单数据高效、可靠地集成到金蝶云星空中,形成盘盈单。为了实现这一目标,我们采用了数据集成平台,通过其强大的数据处......
  • 5金蝶生产订单对接商城:从金蝶云星空到MySQL的数据集成方案
    5金蝶生产订单对接商城:从金蝶云星空到MySQL的数据集成方案在企业信息化系统中,数据的高效流动和准确处理是业务成功的关键。本文将分享一个实际运行的技术案例——如何通过数据集成平台,将金蝶云星空中的生产订单数据无缝对接到MySQL数据库中,实现业务流程的自动化与优化。本次集......
  • 大二上 数据结构与算法笔记 20241024
    一.inline在C和C++编程语言中,inline关键字是一种函数修饰符,用于建议编译器在编译时将函数的代码直接插入到每个函数调用的地方,而不是进行常规的函数调用。这样做的目的是减少函数调用的开销,尤其是在函数体较小且调用频繁的情况下。作用和优点:减少函数调用开销:通过将函数......
  • Linux 中 awk命令整列的替换
     001、测试数据[root@localhosttest2]#lsa.txt[root@localhosttest2]#cata.txt0102030405060708091011121314151617181920212223242526......
  • 数据结构与算法——双链表的实现
    上次学习了单链表,这次来学习双链表。二者之间的区别是,单链表中的每个结点只存有后继结点的地址,而双链表中则存了两个地址,一个是前驱结点的地址,一个是后继结点的地址。结构体structListNode{ intelement;//数据域 structListNode*next; ......
  • 点三电商API:一站式电商数据整合解决方案
    随着电子商务行业的快速发展,越来越多的自研系统商家开始寻求高效的订单管理和数据整合方案,以优化业务流程并提升市场竞争力。然而,在接入电商数据的过程中,商家们面临着两大核心诉求:数据安全和上线时间的保证。数据安全对于自研系统的商家而言,数据是其业务运营的核心资产。在接......
  • 基于springboot+vue的Hadoop的奶茶数据平台系统(源码+lw+部署文档+讲解等)
    课题摘要基于SpringBoot+Vue的Hadoop奶茶数据平台系统可以为奶茶行业提供全面的数据管理和分析解决方案。以下是该系统的设计与实现方案:一、系统功能数据采集与存储从各种数据源(如门店销售系统、社交媒体、市场调研等)采集奶茶相关数据。使用Hadoop分布式文件......
  • 基于springboot+vue的Hadoop的环境质量数据修复系统设计与实现(源码+lw+部署文档+讲解
    课题摘要基于SpringBoot+Vue的Hadoop环境质量数据修复系统是一个用于处理和修复环境质量数据的强大工具。以下是该系统的设计与实现方案,包括源码、LW(LiveWire)、部署文档和讲解等内容。一、系统概述环境质量数据对于环境保护和决策制定至关重要。然而,由于各种原因......
  • 一文告诉您SonarQube的社区版,开发版,企业版以及数据中心版该怎样选
    我们在谈论SonarQube时,大家第一反应是他是一款开源免费(社区版)的代码质量检测工具,其实不然!SonarQube跟据不同的需求,提供了四个版本的软件!如果是几个人的小型公司,那么使用免费版可能会满足需求。一旦您的公司涉及多项目或者百万级代码的检测,我们就必须选择企业版或者数据中......