awk用法

文章目录

  • 一、awk工具
    • awk工作原理
    • AWK程序的结构
    • awk内置变量
  • 二、案例
    • 1.基础案列
    • 2.BEGIN END 运算
    • 3.数值与字符串的比较
    • 4.awk高级用法
    • 5. awk if语句
    • 6.BEGIN END 流程
    • 7.AWK 数组
    • 8.awk 循环

一、awk工具

awk工作原理

当读到第一行时,匹配条件,然后执行指定动作,再接着读取第二行数据处理,不会默认输出
如果没有定义匹配条件默认是匹配所有数据行,awk隐含循环,条件匹配多少次动作就会执行多少次。
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。

sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个"“字段"然后再进行处理。
awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。
在使用awk命令的过程中,可以使用逻辑操作符”
&&“表示"与”、“||表示"或”、"!“表示非”;还可以进行简单的数学运算,如+、一、*、/、%、^分别表示加、减、乘、除、取余和乘方。

AWK程序的结构

开始块(BEGIN block)
顾名思义,开始块就是在程序启动的时候执行的代码部分,并且它在整个过程中只执行一次。一般情况
下,我们在开始块中初始化一些变量。BEGIN是AWK的关键字,因此它必须是大写的。不过,开始块部
分是可选的,你的程序可以没有开始块部分。
主体块(Body Block)
对于每一个输入的行,都会执行一次主体部分的命令。默认情况下,对于输入的每一行,AWK都会执行
命令。注意:在主体块部分,没有关键字存在。
结束块(END Block)
它是在程序结束时执行的代码。END也是AWK的关键字,它也必须大写。与开始块相似,结束块也是可
选的

AWK 工作通过三个步骤
1、读(Read):从文件、管道或标准输入中读入一行然后把它存放到内存中
2、执行(Execute):对每一行数据,根据 AWK 命令按顺序执行。默认情况是处理每一行数据,也可
以指定模式
3、重复(Repeat):一直重复上述两个过程直到文件结束
在这里插入图片描述

awk内置变量

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

二、案例

1.基础案列

awk '{print}' passwd                     #打印全文
awk -F: '{print $1}' passwd              #-F:以:切割,$1表示切割后只显示第一位
awk -F: '/root/{print $0}' passwd        #搜索包含root的行,$0打印一整行
awk -F: '/root/{print $1,$6}' passwd     #搜索包含root的行,$1,$6表示打印第一和第六列
awk -F: '{print NF}' passwd              #打印每一行的列数
awk -F: '{print NR}' passwd              #打印每一行的行号
awk -F: '{print NR,$0}' passwd           #打印每行的行号和内容
awk 'NR==2' /etc/passwd    #可以加print,也可以不加默认就是打印第二行awk 'NR==2{print}' /etc/passwd
awk -F: 'NR==2{print $1}' /etc/passwd    #打印第二行第一列
awk -F: '{print $NF}' /etc/passwd        #打印最后一列
awk 'END{print NR}' /etc/passwd          #打印总行号(实际打印最后一行行号)
awk 'END{print $0}' /etc/passwd          #打印最后一行(因为END是最后处理的,这时打印会打印最后一行)
awk -F: '/root/' /etc/passwd             #打印包含root的行
awk -F: '$1~/root/' /etc/passwd          #模糊查询第一列像root
awk -F: '$1~/ro/' /etc/passwd            #模糊查询第一列像roawk -F: '$7!~/nologin$/{print $1,$7}' /etc/passwd  
#模糊查询第一列不像nologin结尾.并且打印第一列和第七列awk -F: '{print "第"NR"行有"NF"列"}' /etc/passwd     #打印每行行号和列数
ifconfig ens33 | awk '/RX p/{print $5"字节"}'       #/RX p是对ens33的流量监控,显示流量多少
df -h | awk 'NR==2{print $4}'                      #根分区的可用量

awk ‘{print}’ passwd
在这里插入图片描述

awk -F: ‘{print $1}’ passwd
在这里插入图片描述

awk -F: ‘/root/{print $0}’ passwd
在这里插入图片描述

awk -F: ‘/root/{print $1,$6}’ passwd
在这里插入图片描述

awk -F: ‘{print NF}’ passwd
在这里插入图片描述

awk -F: ‘{print NR}’ passwd
在这里插入图片描述

awk -F: ‘{print NR,$0}’ passwd在这里插入图片描述

awk ‘NR==2’ /etc/passwd
在这里插入图片描述

awk -F: ‘NR==2{print $1}’ /etc/passwd
在这里插入图片描述

awk -F: ‘{print $NF}’ /etc/passwd
在这里插入图片描述

awk ‘END{print NR}’ /etc/passwd
在这里插入图片描述

awk ‘END{print $0}’ /etc/passwd
在这里插入图片描述

awk -F: ‘/root/’ /etc/passwd
在这里插入图片描述

awk -F: ‘$1~/root/’ /etc/passwd
在这里插入图片描述

awk -F: ‘$1~/ro/’ /etc/passwd
在这里插入图片描述

awk -F: '$7!~/nologin$/{print $1,$7}' /etc/passwd

在这里插入图片描述

awk -F: ‘{print “第"NR"行有"NF"列”}’ /etc/passwd
在这里插入图片描述

ifconfig ens33 | awk ‘/RX p/{print $5"字节"}’
在这里插入图片描述

df -h | awk ‘NR==2{print $4}’
在这里插入图片描述

2.BEGIN END 运算

逐行执行开始之前执行什么任务,结束之后再执行什么任务,用BEGIN、END
BEGIN一般用来做初始化操作,仅在读取数据记录之前执行一次
END一般用来做汇总操作,仅在读取完数据记录之后执行一次
awk 'BEGIN{x=10;print x}'             #BEGIN在处理文件之前,所以后面不跟文件名也不影响
awk 'BEGIN{x=10;print x+1}'           
awk 'BEGIN{print x+1}'                #不指定初始值,初始值就为0,如果是字符串,则默认为空
awk 'BEGIN{print 4.5-3}'              #小数也可以运算
awk 'BEGIN{print 3*4}'             
awk 'BEGIN{print 1/2}'            
awk 'BEGIN{print 2^3}'                #^和**都是幂运算

awk ‘BEGIN{x=10;print x}’
在这里插入图片描述

awk ‘BEGIN{x=10;print x+1}’
在这里插入图片描述

awk ‘BEGIN{print x+1}’
在这里插入图片描述

awk ‘BEGIN{print 4.5-3}’
在这里插入图片描述

awk ‘BEGIN{print 3*4}’
在这里插入图片描述

awk ‘BEGIN{print 1/2}’
在这里插入图片描述

awk ‘BEGIN{print 2^3}’
在这里插入图片描述

3.数值与字符串的比较

awk 'NR==5{print}' /etc/passwd       #打印行号为5的行
awk 'NR==5' /etc/passwd              #打印行号为5的行(和上个一样)
awk 'NR<5' /etc/passwd               #打印行号小于5的行
awk -F: '$3==0' /etc/passwd          #打印第三列等于0的行
awk -F: '$1=="root"' /etc/passwd     #打印第一行等于root的行
awk -F: '$3>=1000' /etc/passwd       #打印第三行大于等于1000的行

awk ‘NR==5{print}’ /etc/passwd
在这里插入图片描述

awk ‘NR==5’ /etc/passwd
在这里插入图片描述

awk ‘NR<5’ /etc/passwd
在这里插入图片描述

awk -F: ‘$3==0’ /etc/passwd
在这里插入图片描述

awk -F: ‘$1==“root”’ /etc/passwd
在这里插入图片描述

awk -F: ‘$3>=1000’ /etc/passwd
在这里插入图片描述

逻辑运算 && ||
&& 和 || 是逻辑运算符,用于组合多个条件并控制程序流程。
&& 要求所有条件都为真时才为真,否则为假。
|| 只要有一个条件为真就为真,全为假时才为假。
awk -F: '$3<10 || $3>=1000' /etc/passwd         #打印第三列小于10或者大于1000的行
awk -F: '$3>10 && $3<1000' /etc/passwd          #打印第三十列大于10并且小于1000的行
awk -F: 'NR>4 && NR<10' /etc/passwd             #打印行号大于4小于10的行
seq 200 | awk '$1%7==0 && $1~/7/'              
#seq输出一个200的序列传进awk中,$1表示序列中的每个数字,%7==0能否被7整除,并且$1~7,数字还要包含7

awk -F: ‘$3<10 || $3>=1000’ /etc/passwd
在这里插入图片描述

awk -F: ‘$3>10 && $3<1000’ /etc/passwd
在这里插入图片描述

awk -F: ‘NR>4 && NR<10’ /etc/passwd
在这里插入图片描述

seq 200 | awk ‘$1%7==0 && $1~/7/’
在这里插入图片描述

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

awk 'BEGIN{FS=":"}{print $1}' passwd                #BEGIN设置字段分隔符 FS 为冒号 :,打印第一列
awk 'BEGIN{FS=":";OFS="---"}{print $1,$2}' passwd   #BEGIN额外设置输出分隔符为---
awk '{print FNR,$0}' passwd hosts                   #打印行号和内容,FNR是内置变量,行号为每个文件独立
awk '{print NR,$0}' passwd hosts                    #打印行号和内容,NR也是内置变量,但是行号是连续的
awk 'BEGIN{RS=":"}{print $0}' /etc/passwd           #RS:以:为分隔符,所有以:分开的都单独看作一行
awk 'BEGIN{ORS=" "}{print $0}' /etc/passwd          #ORS=" "以空格为输出行分割符

awk ‘BEGIN{FS=“:”}{print $1}’ passwd
在这里插入图片描述

awk ‘BEGIN{FS=“:”;OFS=“—”}{print $1,$2}’ passwd
在这里插入图片描述

awk ‘{print FNR,$0}’ passwd hosts
在这里插入图片描述

awk ‘{print NR,$0}’ passwd
在这里插入图片描述

awk ‘BEGIN{RS=“:”}{print $0}’ /etc/passwd
在这里插入图片描述

awk ‘BEGIN{ORS=" "}{print $0}’ /etc/passwd
在这里插入图片描述

4.awk高级用法

a=100
awk -v b="$a" 'BEGIN{print b}'    
#在awk程序开始之前,设置变量b的值为shell变量的值,然后执行awk程序并打印变量b的值。awk 'BEGIN{print "'$a'"}'
awk -v c=1 'BEGIN{print c}'
#都是赋值awk 'BEGIN{getline}/root/{print $0}' passwd   
#在处理任何输入之前,立即读取一行数据,然后搜索含有root的行(相当于排除第一行)seq 10 | awk '{getline;print $0}'        #跳过第一行,然后打印,显示偶数行
seq 10 | awk '{print $0;getline}'        #先打印,然后跳过一行,显示奇数行

a=100
awk -v b=“$a” ‘BEGIN{print b}’

在这里插入图片描述

awk ‘BEGIN{print "’$a’"}’
awk -v c=1 ‘BEGIN{print c}’
在这里插入图片描述

awk ‘BEGIN{getline}/root/{print $0}’ passwd
在这里插入图片描述

seq 10 | awk ‘{getline;print $0}’
seq 10 | awk ‘{print $0;getline}’

在这里插入图片描述

5. awk if语句

awk的if语句也分为单分支、双分支和多分支
awk -F: '{if($3<10){print $0}}' passwd                
#只要第三列小于10,就打印awk -F: '{if($3<10){print $3} else{print $1}}' passwd  
#第三列小于10,就打印第三列,否则就打印第一列

awk -F: ‘{if($3<10){print $0}}’ passwd
在这里插入图片描述

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读取的每一行都会运行该语句块。
这三个部分缺少任何一部分都可以
awk 'BEGIN{x=0};/\/bin\/bash$/ {x++;print x,$0};END {print x}' passwd            
#设一个变量x,搜索末尾包含/bin/bash,打印自增的x和每行内容,end打印最后的xawk -F: '!($3<200){print}' passwd                  #打印列第三不小于200awk 'BEGIN {FS=":"} ;{if($3>=1000){print}}' passwd       #先用:分割,然后打印第三列大于等于1000的行awk -F: ' {max=($3>=$4) ?$3:$4; {print max}} ' /etc/passwd   #三元运算符,比较第三列和第四列的大小sed -n '=;p' /etc/passwd                   # =用于打印当前的行号,先打印行号,再打印内容awk -F : '$7~"bash"{print $1,$3}' /etc/passwd    #搜索第七列包含像bash的内容,打印第一列和第三列awk -F: '($1~"root") && (NF==7) {print $1,$2,$NF } ' passwd    #搜索第一列像root且列数为7的行,打印第一二列和最后一列awk -F : '($7!="/bin/bash")&&($7!="/sbin/nologin"){print} ' /etc/passwd    #搜索第七列不包含/bin/bash和不包含/sbin/login的列awk -F: '($NF !="/bin/bash")&&($NF !="/sbin/nologin" ) {print NR, $0}' passwd    #搜索最后一列不等于/bin/bash和/sbin/nologin的行echo $PATH | awk 'BEGIN{RS=":"};{print NR,$0};END {print NR}'     
#将PATH传进awk中,以:开始为换行,打印每一行的行号和内容,最后打印最后一行行号free -m |awk '/Mem:/ {print int($3/($3+$4)*100)"%"}'   #搜索包含Mem:的行,运算当前内存使用百分比top -b -n 1 | grep Cpu | awk -F ',' '{print $4}'| awk '{print$1}'  
#top -b -n 1表示静态快照一次传给后面的管道,过滤出Cpu部分,以,分割,打印cpu的空闲率awk 'BEGIN { "hostname" | getline ; {print $0}}'   #getline获取hostname的数据,然后打印

awk ‘BEGIN{x=0};//bin/bash$/ {x++;print x,$0};END {print x}’ passwd
在这里插入图片描述

awk -F: ‘!($3<200){print}’ passwd
在这里插入图片描述

awk ‘BEGIN {FS=“:”} ;{if($3>=1000){print}}’ passwd
在这里插入图片描述

awk -F":" ’ {max=($3>=$4) ?$3:$4; {print max}} ’ /etc/passwd
在这里插入图片描述

sed -n ‘=;p’ passwd
在这里插入图片描述

awk -F: ‘$7~“bash”{print $1,$3}’ passwd
在这里插入图片描述

awk -F":" ‘($1~“root”)&&(NF==7){print $1, 2. 2. 2.NF}’ passwd
在这里插入图片描述

awk -F : '($7!=“/bin/bash”)&&($7!=“/sbin/nologin”){print} ’ /etc/passwd
在这里插入图片描述

awk -F: '($NF !="/bin/bash")&&($NF !="/sbin/nologin" ) {print NR, $0}' passwd

在这里插入图片描述

echo $PATH | awk ‘BEGIN{RS=“:”};{print NR,$0};END {print NR}’
在这里插入图片描述

*free -m |awk '/Mem:/ {print int($3/($3+$4)100)“%”}’
在这里插入图片描述

awk ‘BEGIN { “hostname” | getline ; {print $0}}’
在这里插入图片描述

7.AWK 数组

awk 'BEGIN{a[0]=10;a[1]=20;print a[1]}'       #打印数组下标1的内容
awk 'BEGIN{a["abc"]="aabbcc";a["xyz"]="xxyyzz";print a["xyz"]}'

awk ‘BEGIN{a[0]=10;a[1]=20;print a[1]}’
在这里插入图片描述

awk ‘BEGIN{a[“abc”]=“aabbcc”;a[“xyz”]=“xxyyzz”;print a[“xyz”]}’
在这里插入图片描述

8.awk 循环

awk 'BEGIN{a[0]=10;a[1]=20;a[2]=30;for(i in a){print a[i]}}'        #循环打印数组a,在awk中i不需要定义,会自动迭代awk '{ip[$1]++;} END{for(i in ip){print ip[i],i}}' /var/log/httpd/access_log | sort -
#统计日志文件中每个 IP 地址的出现次数,ip[$1]++ 表示如果 ip 数组中已经存在键 $1(即该 IP 地址),则对应的值增加 1awk '{a[$1] += 1;} END {for (i in a) printf("%d %s\n", a[i],i);}'
#统计文本文件中每一行第一列数据的出现次数("%d %s\n" 是一个格式化字符串,这个字符串定义了如何打印数组中的元素和它们的索引)awk '/Failed password/ {print $0} ' /var/log/secure    #搜索包含Failed password的行awk '/Failed/{ip[$11]++}END{for(i in ip){print i" "ip[i]}}'/var/log/secure    
#ip[$11]++每出现一次1行的元素就+1,统计出现次数,for 循环的变量 i 用来表示当前遍历到的键
(awk不需要定义循环次数,它内部自己就有循环)

awk ‘BEGIN{a[0]=10;a[1]=20;a[2]=30;for(i in a){printi a[i]}}’
在这里插入图片描述

awk '/Failed password/ {print $0} ’ /var/log/secure
在这里插入图片描述

awk ‘/Failed/{ip[$11]++}END{for(i in ip){print i","ip[i]}}’/var/log/secure
在这里插入图片描述

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

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

相关文章

【C++11】C++11新纪元:深入探索右值引用与移动语义

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;位图与布隆过滤器 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀C11 &#x1f4d2;1. C11简介…

【Qt】修改窗口的标题和图标

以下操作仅对顶层 widget(独⽴窗口),有效。 修改窗口的标题 一.windowTitle属性 1.概念 是一种在用户界面中显示窗口的标题的属性。它可以用来设置窗口的标题栏文本。 2.API API说明windowTitle()获取到控件的窗⼝标题.setWindowTitle(const QString& title)设置控件的…

10 BERT

目录 1 综述 1.1 BERT的核心思想 1.2 BERT的关键技术&#xff1a;预训练阶段 1.3 微调阶段 2 BERT的架构 2.1 输入处理 3. 特征选择/学习模块 BERT 的自注意力过程 4. 预训练任务&#xff1a;同时进行 4.1 Next Sentence Prediction (NSP) 4.2 Masked Language Model…

基于微信小程序+SpringBoot+Vue的网络安全科普系统(带1w+文档)

基于微信小程序SpringBootVue的网络安全科普系统(带1w文档) 基于微信小程序SpringBootVue的网络安全科普系统(带1w文档) 优质的网络安全科普系统不仅可以单纯的满足工作人员管理的日常工作需求&#xff0c;还可以满足用户的需求。可以降低工作人员的工作压力&#xff0c;提高效…

2024.7.29 作业

1> 写一个日志文件&#xff0c;将程序启动后&#xff0c;每一秒的时间写入到文件中 #include <myhead.h> int main(int argc,const char *argv[]) {FILE *fp NULL;if((fpfopen("./log.txt","r"))NULL) {perror("open error1");return…

Python数值计算(1)

准备总结一下通过Python进行数值计算的环境&#xff0c;先说一下数值计算的基本语法和库。 1.基本运算 Python中提供基本运算符&#xff0c;常见的加减乘除&#xff0c;唯一需要注意的是除法&#xff0c;整数除法和浮点数除法不一样。 一般除法/&#xff0c;无论参与运算的数…

通信系统的均衡技术

1、摘要 在通信系统中&#xff0c;信号从发送端发出&#xff0c;经过信道&#xff0c;到达接收端&#xff0c;而在传输的过程中&#xff0c;信号会发生失真&#xff0c;产生失真的原因有很多&#xff0c;包括阻抗不匹配&#xff0c;干扰等。为了优化信号质量&#xff0c;需要进…

基于tkinter的学生信息管理系统之登录界面和主界面菜单设计

目录 一、tkinter的介绍 二、登陆界面的设计 1、登陆界面完整代码 2、部分代码讲解 3、登录的数据模型设计 4、效果展示 三、学生主界面菜单设计 1、学生主界面菜单设计完整代码 2、 部分代码讲解 3、效果展示 四、数据库的模型设计 欢迎大家进来学习和支持&#xff01…

灯具外贸公司用什么企业邮箱好

灯具外贸公司面对海外市场的推广、产品销售、客户沟通、市场信息收集等多重需求&#xff0c;选择一个合适的企业邮箱显得尤为重要。本文将介绍灯具外贸公司为什么应选择Zoho Mail企业邮箱&#xff0c;并详细探讨其优势和功能。 一、公司背景 广东省深圳市光明新区&#xff0c…

Redis 安装和数据类型

Redis 安装和数据类型 一、Redis 1、Redis概念 redis 缓存中间件&#xff1a;缓存数据库 nginx web服务 php 转发动态请求 tomcat web页面&#xff0c;也可以转发动态请求 springboot 自带tomcat 数据库不支持高并发&#xff0c;一旦访问量激增&#xff0c;数据库很快就…

vTESTstudio中如何添加DLL文件?

文章目录 一、CANoe添加DLL二、vTESTstudio中添加DLL1.手动添加2.代码添加 一、CANoe添加DLL 在CANoe中添加DLL的路径如下图&#xff0c;在Simulation Setup中选择需要添加的节点&#xff0c;右键选择Configuration进行添加DLL。 二、vTESTstudio中添加DLL 1.手动添加 在打…

java中 VO DTO BO PO DAO

VO、DTO、BO、PO、DO、POJO 数据模型的理解和实际使用_vo dto bo-CSDN博客 深入理解Java Web开发中的PO、VO、DTO、DAO和BO概念_java dto dao-CSDN博客

【计算机网络】WireShark和简单http抓包实验

一&#xff1a;实验目的 1&#xff1a;熟悉WireShark的安装流程和界面操作流程。 2&#xff1a;学会简单http的抓取和过滤&#xff0c;并分析导出结果。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a; Windows 2019操作系统的计算机等。 软件&#xff1a;WireShark、…

【算法/训练】:动态规划(线性DP)

一、路径类 1. 字母收集 思路&#xff1a; 1、预处理 对输入的字符矩阵我们按照要求将其转换为数字分数&#xff0c;由于只能往下和往右走&#xff0c;因此走到&#xff08;i&#xff0c;j&#xff09;的位置要就是从&#xff08;i - 1&#xff0c; j&#xff09;往下走&#…

前端面试基础题(微信公众号:前端面试成长之路)

BFC、IFC、GFC、FFC CSS2.1中只有BFC和IFC, CSS3中才有GFC和FFC。 到底什么是BFC、IFC、GFC和FFC Whats FC&#xff1f; 一定不是KFC&#xff0c;FC的全称是&#xff1a;Formatting Contexts&#xff0c;是W3C CSS2.1规范中的一个概念。它是页面中的一块渲染区域&#xff0c;并…

免费【2024】springboot 宠物领养救助平台的开发与设计

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

普元EOS学习笔记-EOS项目HTTP访问安全和权限控制

前言 对于企业应用系统&#xff0c;出于安全和权限控制的目的&#xff0c;需要对http请求做若干控制。 比如文件上传的时候要控制不允许上传的文件后缀。 又比如控制应用程序中的哪些资源不允许被访问。 EOS项目通过 xml配置文件来实现这一需求。 Http访问管理模块 在EOS项…

【C++版本】protobuf与gRPC

文章目录 一、Protobuf二、安装以及使用protoc参考 一、Protobuf Google Protocol Buffers&#xff08;protobuf&#xff09;是一种语言中立、平台中立的序列化协议&#xff0c;旨在高效地将结构化数据进行序列化和反序列化。它主要用于通信协议、数据存储和其他需要高效编码和…

封装和桥接Unity 协程体系

简介 协程&#xff08;Coroutine&#xff09;在C#中是一种特殊的函数&#xff0c;它允许开发者编写可以暂停执行并在未来某个时刻恢复执行的代码块。协程通常用于实现异步操作&#xff0c;如延时执行、等待某个事件发生、或者分段执行复杂的任务。在Unity游戏引擎中&#xff0c…