14.shell awk数组

awk数组

          • awk数组
          • awk数组示例
          • Nginx日志分析

awk数组

1.什么是awk数组
数组其实也算是变量,传统的变量只能存储一个值,但数组可以存储多个值

2.awk数组应用场景
通常用来统计、比如:统计网站访问TOP10、网站url访问TOP10等等

3.awk数组统计技巧
1.在awk中,使用数组时,不仅可以使用123…n作为数组索引,也可以使用字符串作为数组索引。
2.要统计某个字段的值,就将该字段作为数组的索引,然后对索引进行遍历。

4.awk数组的语法
array_name[index]=value


awk数组示例

例:统计passwd文件中,各种shell类型的个数
以:为分隔符,第7列就是shell类型,可用$7表示,或用$NF表示

BEGIN{
	FS=":"
}
{ #赋值操作
	sh[$NF]++ #如果出现相同类型shell就让其加1,出现不同类型的shell就新存一个数组
}
END{ #赋值完成后,需要通过循环的方式将其索引的次数遍历出来
	for (item in sh){
		print item,sh[item]
	}
}

在这里插入图片描述


Nginx日志分析

日志格式如下:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

52.55.21.59 - - [25/Jan/2018:14:55:36 +0800] "GET /feed/ HTTP/1.1" 404 162 "https://www.google.com/" "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; de) Presto/2.9.168 Version/11.52" "-"

这里随便找了个日志进行测试,所以日志量不够,将就看吧

1.统计访问最多的10个IP

awk '{accessip[$1]++} END{for(item in accessip){printf "%-20s %-20s \n",accessip[item],item}}' access.log |sort -nr|head -10

在这里插入图片描述

{	
	accessip[$1]++ #统计每个IP出现的次数,出现相同的IP 就自增,不同的IP就存到新的数组
}
END{
	for(item in accessip){
	print accessip[item],item  #accessip[item]对应一个IP出现的次数,item表示IP地址,也就是数组的索引
	}
}

在这里插入图片描述

这里的sort 命令用于排序,-n:按照数值大小进行排序,-r以相反的顺序来排序


2.统计访问大于100次的IP

在之前的基础上加一个判断,判断IP的访问量是否大于100,大于就打印

awk '{accessip[$1]++} END{for(item in accessip){if(accessip[item]>100){ printf "%-20s %-20s \n",accessip[item],item}}}' access.log |sort -nr

在这里插入图片描述

{ #统计每个IP出现的次数
	accessip[$1]++
}
END{  #accessip[item]对应一个IP出现的次数,item表示IP地址,也就是数组的索引
		for(item in accessip){
			if(accessip[item]>100){
			printf "%-20s %-20s \n",accessip[item],item
		}
	}
}

在这里插入图片描述


3.统计访问最多的10个页面($request top 10)
第7列是请求到的内容

awk '{req[$7]++}END{for(item in req){print req[item],item}}' access.log |sort -rn|head -10

在这里插入图片描述

{
	req[$7]++
}
END{
	for(item in req){
		print req[item],item
	}
}

在这里插入图片描述


4.统计每个IP访问状态码数量($status)
第九列是状态码

awk '{ip_status[$1 "" $9]++}END{for(item in ip_status){print ip_status[item],item}}' access.log

在这里插入图片描述

{
	ip_status[$1" "$9]++
}
END{
	for(item in ip_status){
		print ip_status[item],item
	}
}

在这里插入图片描述


5.统计访问状态码为404及出现的次数($status)
在之前的基础上,对状态码进行判断,等于404就打印

awk '{ip_status[$9]++}END{for(item in ip_status){if(item==404){print ip_status[item],"次",item}}}' access.log

在这里插入图片描述

{
	ip_status[$9]++ 
}
END{
	for( item in ip_status){
		if(item==404){
		print ip_status[item],"次",item
		}
	}
}

在这里插入图片描述


6.统计每个URL访问内容总大小

{
	url[$7]+=$10
}
END{
	for (item in url){
	print url[item],item
}
}

在这里插入图片描述

{
        url[$7]+=$10
}
END{
        for (item in url){
                if(url[item]/1024/1024 >0) {
                          print url[item]/1024/1024"Mb",item
}

}
}

在这里插入图片描述

{
        url[$7]+=$10
        cont[$7]++
}
END{
        for (item in url){
                if(url[item]/1024/1024 >0) {
                          print url[item]/1024/1024"Mb",item,cont[item],"次"
}

}
}

在这里插入图片描述


统计各种状态码出现的数量

 awk '{code[$9]++} END {for(i in code){print i,code[i],"次"}}' acccess.log

在这里插入图片描述


{
if($9>=100 && $9<200) {
i++
}
else if ($9>=200 && $9<300) {
j++
}
else if ($9>=300 && $9<400) {
k++
}
else if ($9>=400 && $9<500) {
n++
}
else if($9>=500) {
p++
}
}
END{print i,j,k,n,p,i+j+k+n+p
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL 14.2 安装教程

第一章 PostgreSQL安装 1.1 新建/opt/tools目录 mkdir -p /opt/tools 1.2 上传postgresql文件 1.3 解压postgresql文件 tar -zxvf postgresql-14.2.tar.gz 1.4 进入postgresql并配置 cd postgresql-14.2 mkdir -p /opt/app/postgresql ./configure --prefix/opt/app/postg…

“探索机器学习的多面世界:从理论到应用与未来展望“

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;机器学习 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 目录 一、机器学习基础理论 1.机器学习的定义与分类 监督学习 无监督学…

英格索兰IC12D3A1AWS-A控制器过热维修

在现代工业生产中&#xff0c;拧紧控制器作为一种自动控制工具&#xff0c;被广泛应用于汽车、航空、电子等领域。然而&#xff0c;在使用过程中&#xff0c;可能会出现IngsollRang拧紧控制器过热故障&#xff0c;影响生产效率和产品质量。 【拧紧设备维修】【英格索兰IngsollR…

js: 百度云BOS 分片上传

百度云BOS存储后怎么查看或下载呢&#xff1f; // 1) 查看登录到百度智能云控制台 – 对象存储BOS”服务–选择一个Bucket&#xff0c;进入后可以查看该Bucket下的所有文件和文件夹。 2&#xff09;下载OS浏览器端不支持批量下载&#xff0c;可以通过以下方式下载文件(使用BOS桌…

VirtualBox、Centos7下安装docker后pull镜像问题

Docker安装篇(CentOS7安装)_docker 安装 centos7-CSDN博客 首先&#xff0c;安装docker可以根据这篇文章进行安装&#xff0c;安装完之后&#xff0c;我们就需要去通过docker拉取相关的服务镜像&#xff0c;然后安装相应的服务容器&#xff0c;比如我们通过docker来安装mysql,…

工业烤箱设备厂家:专业制造,助力工业发展

随着现代工业的不断发展&#xff0c;工业烤箱设备在各个领域的应用越来越广泛。作为专业的工业烤箱设备厂家&#xff0c;我们致力于为客户提供高质量、高效率的烤箱设备&#xff0c;助力工业生产的顺利进行。 工业烤箱设备在工业生产中扮演着至关重要的角色。无论是电子、化工、…

Web应用安全测试-业务逻辑缺陷

Web应用安全测试-业务逻辑缺陷 密码修改/重置流程跨越 漏洞描述&#xff1a;密码修改功能常采用分步骤方式来实现&#xff0c;攻击者在未知原始密码的情况下绕过某些检验步骤修改用户密码。 测试方法&#xff1a; 完成修改&#xff0f;重置密码的正常流程&#xff1b;绕过检…

机器视觉:光源的类型以及主要参数

光源在机器视觉中起着决定性的作用&#xff0c;决定了视觉算法的复杂性&#xff0c;也决定了视觉系统的精度和稳定性。光源用于突出目标物体的特征&#xff0c;增加目标物体与背景的对比度&#xff0c;克服环境光线的干扰。光源的选择与打光方式在视觉系统的前期评估中非常重要…

自然语言处理领域的重大挑战:解码器 Transformer 的局限性

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

frp55版本如何配置泛域名

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 之前配置的好好的frp&#xff0c;结果到用的时候不能用了&#xff0c;直接影响了我早上的一堆rss订阅源不能用&#xff0c;群里的新闻简报也没有正常推送&#xff0c;今天又翻出来捋…

如何将NextJs中的File docx保存到Prisma ORM

背景/引言 在现代 Web 开发中&#xff0c;Next.js 是一个备受欢迎的 React 框架&#xff0c;它具有许多优点&#xff0c;如&#xff1a; 服务器端渲染 (SSR)&#xff1a;Next.js 支持服务器端渲染&#xff0c;可以提高页面加载速度&#xff0c;改善 SEO&#xff0c;并提供更好…

计算机网络 —— 运输层(UDP和TCP)

计算机网络 —— 运输层&#xff08;UDP和TCP&#xff09; UDPTCPUDP和TCP的异同点相同点不同点 我们今天来看运输层的两个重要的协议——UDP和TCP UDP UDP&#xff0c;全称为用户数据报协议&#xff08;User Datagram Protocol&#xff09;&#xff0c;是互联网中一种核心的…

Day07-06_13【CT】LeetCode手撕—1. 两数之和

目录 题目1-思路2- 实现⭐1. 两数之和——题解思路 3- ACM实现 题目 原题连接&#xff1a;1. 两数之和 1-思路 哈希表 利用哈希表存储 key 数组元素值 ——> value 数组下标遍历数组 2- 实现 ⭐1. 两数之和——题解思路 class Solution {public int[] twoSum(int[] nums…

【MySQL】E-R图-关系数据模型-3NF--精讲+练习(巨全面)

一.知识储备 E-R图 E-R图&#xff0c;即实体-关系图&#xff08;Entity-Relationship Diagram&#xff09;&#xff0c;是数据库建模的一种工具&#xff0c;用于表示实体类型、属性以及它们之间的关系。 在E-R图中&#xff0c;实体用矩形表示&#xff0c;属性用椭圆表示&…

【精品方案】离散型制造行业智能工厂标准解决方案(49页 PPT)

引言&#xff1a;随着科技的不断进步和制造业的转型升级&#xff0c;离散型制造行业正面临着从传统制造向智能制造转型的迫切需求。离散型制造行业涉及的产品种类繁多&#xff0c;生产流程复杂&#xff0c;对生产效率、产品质量和成本控制有着极高的要求。因此&#xff0c;开发…

Nginx部署Vue项目css文件能加载但是不生效

目录 问题描述问题解决 问题描述 Nginx部署打包后的Vue项目css文件能加载但是不生效&#xff0c; 问题解决 查看响应标头&#xff0c;发现不对劲&#xff0c; Content-Type: text/plain正确的应该是 Content-Type: text/css根本原因是nginx没有告诉浏览器正确的文件类型 所…

大厂Java面试题:详细描述MyBatis缓存的实现原理

大家好&#xff0c;我是王有志。今天给大家带来的是一道来自光大科技的 MyBatis 面试题&#xff1a;详细描述MyBatis缓存的实现原理。 在通过源码分析 MyBatis 一二级缓存的实现原理前&#xff0c;我先给出我的回答。 首先是 MyBatis 一级缓存的实现原理&#xff1a; MyBaits…

vscode插件开发之 - menu配置

上一遍博客介绍了如何从0到1搭建vscode插件开发的base code&#xff0c;这遍博客将重点介绍如何配置menu。通常&#xff0c;开发一款插件&#xff0c;会将插件显示在VSCode 左侧的活动栏&#xff08;Activity Bar&#xff09;&#xff0c;那么如何配置让插件显示在Activity Bar…

[Shell编程学习路线]——深入理解Shell编程中的变量(理论与实例)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f6e0;️Shell编程专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月12日11点40分 &#x1f004;️文章质量&#xff1a;95分 文章目录 ————前言———— 1 自定义变量 &#x1fae0;…

数据结构笔记39-48

碎碎念&#xff1a;想了很久&#xff0c;不知道数据结构这个科目最终该以什么笔记方式呈现出来&#xff0c;是纸质版还是电子版&#xff1f;后来想了又想&#xff0c;还是电子版吧&#xff1f;毕竟和计算机有关~&#xff08;啊哈哈哈哈哈哈哈&#xff09; 概率论已经更新完了&…