深圳专业网站设计公司价格/百度资源搜索平台
目录
一、awk简介
二、awk工作原理
三、awk命令格式
四、awk命令的使用
1.print操作按行输出文本
2.print操作按字段截取输出文本
3.使用BEGIN和END指定操作
4.使用管道符号,双引号调用shell命令
5.使用操作getline
6.使用操作OFS
7.配合数组使用
一、awk简介
awk是linux的一个强大的命令,具备强大的文本格式化能力,比如对一堆看起来没有什么规律的日志文件,文本文件等,通过awk命令格式化输出为专业的可以做为应用级数据分析的样式。
二、awk工作原理
逐行读取文本,默认以空格或制表符为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”,然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。
在使用awk命令的过程中,可以使用逻辑操作符"&&"表示"与"、"||"表示"或"、"!"表示"非",还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方
三、awk命令格式
awk [选项] '模式或条件 {操作表达式}' 文件名...
awk常用选项
选项 | 作用 |
---|---|
-F | 后面跟符号,指定列分隔符 |
-v | 后面跟变量,允许使用变量 |
awk常见内建变量
内建变量 | 作用 |
---|---|
FS | 列分隔符,指定每行文本的字段分隔符(默认为空格和制表符)。 与-F 选项作用相同 |
OFS | 输出内容的列分隔符 |
NF | 当前处理行的字段个数 $NF可以表示最后一行 |
NR | 指定当前处理的行的行号 |
$0 | 当前处理的行的整行内容 |
$n | 当前处理行的第n个字段 |
RS | 行分隔符,指定航分隔符(默认是换行符"\n") |
四、awk命令的使用
1.print操作按行输出文本
//1.输出所有内容
[root@localhost1 ~]#awk '{print}' numfile
one
two
three
four
five
six
seven
eight
nine
ten
[root@localhost1 ~]#awk '{print $0}' numfile #$0代表匹配到的整行
one
two
three
four
five
six
seven
eight
nine
ten
//2.指定行,输出1~3行内容
[root@localhost1 ~]#awk 'NR==1,NR==3 {print}' numfile
one
two
three
[root@localhost1 ~]#awk '(NR>=1)&&(NR<=3) {print}' numfile
one
two
three
//3.指定的几行,输出第1、3行
[root@localhost1 ~]#awk 'NR==1||NR==3 {print}' numfile
one
three
//4.输出奇偶行
[root@localhost1 ~]#awk '(NR%2)==0 {print}' numfile
two
four
six
eight
ten
[root@localhost1 ~]#awk '(NR%2)==1 {print}' numfile
one
three
five
seven
nine
//5.输出行号
[root@localhost1 ~]#awk '{print NR,$0}' file1
1 one two three
2 four five six
3 seven eight nine
4 ten eleven twelve
//6.指定第1行包含o的行。输出行号和内容
[root@localhost1 ~]#awk '$1~"o" {print NR,$0}' file1
1 one two three
2 four five six
//7.指定输出包含指定字符串的行
[root@localhost1 ~]#awk '/root/ {print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
//8.指定输出包含指定正则表达式的行
[root@localhost1 ~]#awk '/^root.*bash$/ {print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
2.print操作按字段截取输出文本
//1.指定字段分隔符":",输出每行1,3字段
[root@localhost1 ~]#awk -F ':' '{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
...
avahi 70
postfix 89
tcpdump 72
hx 1000
apache 48
zhangsan 1001
lisi 1002
zhaoliu 1003
wangwu 1004
qianqi 1005
zhuba 1006
//2.在第1条基础上,限定行范围,第3个字段值小于1000的行,输出每行1,3字段
[root@localhost1 ~]#awk -F ':' '$3>1000 {print $1,$3}' /etc/passwd
nfsnobody 65534
zhangsan 1001
lisi 1002
zhaoliu 1003
wangwu 1004
qianqi 1005
zhuba 1006
//3.指定最后一个字段包含sbin的行,输出第1和最后一个字段
[root@localhost1 ~]#awk -F ':' '$NF~"sbin" {print $1,$NF}' /etc/passwd
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
games /sbin/nologin
...
rpcuser /sbin/nologin
nfsnobody /sbin/nologin
gnome-initial-setup /sbin/nologin
sshd /sbin/nologin
avahi /sbin/nologin
postfix /sbin/nologin
tcpdump /sbin/nologin
apache /sbin/nologin
named /sbin/nologin
dhcpd /sbin/nologin
//4.输出最后一个字段既不是/sbin/nologin也不是/bin/bash的行
[root@localhost1 ~]#awk -F ':' '($NF!="/sbin/nologin")&&($NF!="/bin/bash") {print $1,$NF}' /etc/passwd
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
3.使用BEGIN和END指定操作
awk [选项] 'BEGIN {表达式}; [条件] {操作表达式}; END {表达式}' 文件名...
-
BEGIN {操作1} awk在读取文件之前执行的操作
-
[条件] {操作2} awk 逐行读取文件时执行的操作
-
END {操作3} awk在处理完文件所有行之后执行的操作
//1.输出结尾为nologin的行,并为每行计数显示行号,最后输出总行数
[root@localhost1 ~]#awk 'BEGIN {a=0}; /nologin$/ {a++; print a,$0}; END {print " 共有"a"行"}' /\etc/passwd
1 bin:x:1:1:bin:/bin:/sbin/nologin
2 daemon:x:2:2:daemon:/sbin:/sbin/nologin
3 adm:x:3:4:adm:/var/adm:/sbin/nologin
4 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
5 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
...
34 nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
35 gnome-initial-setup:x:988:982::/run/gnome-initial-setup/:/sbin/nologin
36 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
37 avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
38 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
39 tcpdump:x:72:72::/:/sbin/nologin
40 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
41 named:x:25:25:Named:/var/named:/sbin/nologin
42 dhcpd:x:177:177:DHCP server:/:/sbin/nologin
共有42行
4.使用管道符号,双引号调用shell命令
//1.输出以:分割的第1和3个字段
[root@localhost1 ~]#echo $PATH |awk 'BEGIN {FS=":"}; {print $1,$3}'
/usr/local/sbin /usr/sbin
//2.输出$PATH的每个文件
[root@localhost1 ~]#echo $PATH |awk 'BEGIN {RS=":"}; {print NR,$0} END {print "共有"NR"行"}'
1 /usr/local/sbin
2 /usr/local/bin
3 /usr/sbin
4 /usr/bin
5 /root/bin
共有5行
//3.输出ens33网卡的ip和mac地址
[root@localhost1 ~]#ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.116.10 netmask 255.255.255.0 broadcast 192.168.116.255inet6 fe80::7791:1d06:d2da:af8e prefixlen 64 scopeid 0x20<link>ether 00:0c:29:3b:4b:c3 txqueuelen 1000 (Ethernet)RX packets 19934 bytes 1547296 (1.4 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 8225 bytes 867536 (847.2 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost1 ~]#ifconfig ens33 |awk 'NR==2 {print $2}'
192.168.116.10
[root@localhost1 ~]#ifconfig ens33 |awk '/ether/ {print $2}'
00:0c:29:3b:4b:c3
//4.内存占用多少MB
[root@localhost1 ~]#free -mtotal used free shared buff/cache available
Mem: 1819 563 849 14 406 1080
Swap: 8191 0 8191
[root@localhost1 ~]#free -m | awk 'NR==2 {print $3}'
563
[root@localhost1 ~]#free -m | awk '/Mem/ {print $3}'
563
//5.内存占用率
[root@localhost1 ~]#free -mtotal used free shared buff/cache available
Mem: 1819 563 848 14 406 1080
Swap: 8191 0 8191
[root@localhost1 ~]#free -m | awk '/Mem/ {print ($4/$2*100)"%"}'
46.619%
[root@localhost1 ~]#free -m | awk '/Mem/ {print int($4/$2*100)"%"}'
46%
//6.CPU空闲率
[root@localhost1 ~]#top -b -n1 |awk -F "," '/Cpu/ {print $4}' |awk '{print $1"%"}'
98.5%
//7.计算开机时间
[root@localhost1 ~]#date -d "$(awk '{print $1}' /proc/uptime) second ago" +"%Y%m%d %H:%M:%S"
20220905 21:28:50
[root@localhost1 ~]#date -d "-$(awk '{print $1}' /proc/uptime) second" +"%Y%m%d %H:%M:%S"
20220907 08:32:41
5.使用操作getline
-
当getline左右无重定向符“<”或“|”时,awk首先读取到了第一行,就是1,然后getline,就得到了1下面的第二行,就是2,因为getline之后,awk会改变对应的NF,NR,FNR和$0等内部变量,所以此时的$0的值就不再是1,而是2了,然后将它打印出来。
-
当getline左右有重定向符“<”或“|”时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。
//1.利用getline输出奇偶行
[root@localhost1 ~]#seq 10 |awk '{getline;print $0}'
2
4
6
8
10
[root@localhost1 ~]#seq 10 |awk '{print $0;getline}'
1
3
5
7
9
//2.利用getline输出主机名
[root@localhost1 ~]#awk 'BEGIN {"hostname" |getline ;{print $0} }'
localhost1
//3.利用getline读取w命令显示的行数,统计出在线用户数(减去前2个无关行)
[root@localhost1 ~]#w14:56:47 up 6:24, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.116.1 14:17 7.00s 0.14s 0.02s w
[root@localhost1 ~]#w |awk 'NR>2 {print $0 | "wc -l"}'
1
6.使用操作OFS
//1.利用OFS输出第1和3个字段,并用:作为输出的分隔符
[root@localhost1 ~]#echo "A B C D" |awk '{OFS=":";print $1,$3}'
A:C
//2.利用OFS指定分割符输出整行内容时,需要使用$1=$1刷新整行内容
[root@localhost1 ~]#echo "A B C D" |awk '{OFS=":";$1=$1;print $0}'
A:B:C:D
7.配合数组使用
//1.输出指定数组值
[root@localhost1 ~]#awk 'BEGIN {a[0]=10;a[1]=20;print a[1]}'
20
[root@localhost1 ~]#awk 'BEGIN {a[0]=10;a[1]=20;print a[0]}'
10
//2.使用字符串作为数组索引,输出指定数组值
[root@localhost1 ~]#awk 'BEGIN {a["abc"]=10;a["xyz"]=20;print a["abc"]}'
10
//数组值也可以为字符串
[root@localhost1 ~]#awk 'BEGIN {a["abc"]="aa";a["xyz"]="xx";print a["abc"]}'
aa
//3.遍历数组
[root@localhost1 ~]#awk 'BEGIN {a[0]=10;a[1]=20;a[2]=30; for(i in a) {print i,a[i]}}' 0 10
1 20
2 30
利用数组做统计
awk 根据指定字段读取每行的字段内容,使用字段内容作为数组的索引,如果出现相同内容的行,则用这个行内容做的数组的值自增1;END{ for(i in arr) {print arr[i],i} awk 读取完所有行内容后,使用for循环遍历这个数组的下标,打印每个下标出现的次数和下标的值。
awk '{arr{$n}++}; END{ for(i in arr) {print arr[i],i}' 文件名..
//1.利用数组统计,输出文件中各行出现的次数并排序
[root@localhost1 ~]#cat test.txt | awk '{arr[$1]++}; END{for(i in arr) {print arr[i],i}}' test.txt |sort -rn
4 aaa
3 bbb
1 ccc
//2.利用数组统计,过滤输入密码超过3次的主机ip
[root@localhost1 /]#awk '/Failed password/ {a[$13]++};END{for(i in arr) {print arr[i],i}}' /var/log/secure |awk '$1>3 {print $2}'
192.168.116.1
192.168.116.10
利用数组做去重
awk '1' 就是 awk '1{print}' ,允许打印读入的行内容,例:echo 123 | awk '1'
awk '0' 就是 awk '0{print}' ,不允许打印读入的行内容,例:echo 123 | awk '0'
var++ 的形式:先读取 var 变量值,再对 var 值 +1 awk 处理第一行时:先读取 a[$1] 值再自增,a[$1] 即 a[1] 值为空(即0),即为 awk '!0',即为 awk '1',即为 awk'1{print}' awk 处理第二行时:先读取 a[$1] 值再自增,a[$1] 即 a[1] 值为 1,即为 awk '!1',即为 awk '0',即为 awk '0{print}'
//使用!arr[$1]++实现禁止重复读取到的内容输出
[root@localhost1 ~]#arr=(1 2 3 4 3 4 5 3 5 2 3 1)
[root@localhost1 ~]#echo ${arr[@]} |awk 'BEGIN{RS=" "}; !arr[$1]++'
1
2
3
4
5
相关文章:

Shell脚本文本三剑客之awk编辑器
目录 一、awk简介 二、awk工作原理 三、awk命令格式 四、awk命令的使用 1.print操作按行输出文本 2.print操作按字段截取输出文本 3.使用BEGIN和END指定操作 4.使用管道符号,双引号调用shell命令 5.使用操作getline 6.使用操作OFS 7.配合数组使用 一、…...

Focal Loss介绍
目录 前言一. Focal Loss二. 总结 前言 在目标检测算法中,我们会经常遇到Focal Loss这个东西,今天我们就来简单的分下下这个损失。 一. Focal Loss 在深度学习训练的时候,在遇到目标类别不平衡时,如果直接计算损失函数࿰…...

【数据结构与算法】04 哈希表 / 散列表 (哈希函数、哈希冲突、链地址法、开放地址法、SHA256)
一种很好用,很高效,又一学就会的数据结构,你确定不看看? 一、哈希表 Hash Table1.1 核心概念1.2 哈希函数 Hash Function1.3 哈希冲突 Hash Collision1.4 哈希冲突解决1.41 方法概述1.42 链地址法 Separate Chaining1.43 开放寻址…...

每日一道面试题之介绍一下Java的序列化和反序列化!
什么是序列化? 序列化是将对象转换为容易传输的格式的过程,它是一种用来处理对象流的机制,将对象的内容流化,从而使流化后的对象传输于网络之间,以便它们可以在网络上传输或在磁盘上存储。反序列化是将序列化后的数据…...

Netty实战(十一)
预置的ChannelHandler和编解码器(一)HTTP和SSL/TLS的添加和使用 一、SSL和TLS添加二、基于Netty的HTTP程序2.1 HTTP解码器、编码器和编解码器2.2 聚合HTTP消息2.3 HTTP压缩 一、SSL和TLS添加 作为一个通讯框架,通讯数据的安全性也是不可或缺的…...

Qos服务质量、心跳机制、保留消息,遗嘱信息,用户密码认证
这里写目录标题 Qos服务质量使用ESP8266接收QoS1的MQTT消息保留消息(retainFlag)心跳机制遗嘱信息 Qos服务质量 若想实现QoS>0,订阅端连接服务端时cleanSession需要设置为false,订阅端订阅主题时QoS>0,发布端发…...

MATLAB 之 线性方程组求解
这里写目录标题 一、线性方程组求解1. 线性方程组的直接解法1.1 利用左除运算符的直接解法1.2 利用矩阵的分解求解线性方程组 2. 线性方程组的迭代解法2.1 Jacobi 迭代法2.2 Gauss-Serdel 迭代法 3. 求线性方程的通解 一、线性方程组求解 在 MATLAB 中,关于线性方程…...

华为OD机试真题 Java 实现【字符串序列判定】【2022Q4 100分】,附详细解题思路
一、题目描述 输入两个字符串a和b,都只包含英文小写字母。a长度<=100,b长度<=500,000。 判定a是否是b的有效子串。 判定规则: a中的每个字符在b中都能找到(可以不连续),且a在b中字符的前后顺序与a中顺序要保持一致。 (例如,a=”qwt”是b=”qwerty”的一个子…...

taro使用小记 —— 持续更新
目录 1、在 taro 中使用 axios2、在 taro 中添加全局组件自动引入和方法自动引入3、在 taro 中使用 pinia 1、在 taro 中使用 axios taro 3.6 版本已经支持了网络请求库。 需安装插件 tarojs/plugin-http 使用和注意事项说明: https://www.npmjs.com/package/taroj…...

【LeetCode】110. 平衡二叉树
110. 平衡二叉树(简单) 思路 对二叉树做先序遍历,从底至顶返回子树最大高度,若判定某子树不是平衡树则“剪枝”直接向上返回。 递归返回值: 当节点 root 左、右子树的高度差 > 1:返回 -1,代…...

SQL视图、存储过程、触发器
一、视图 (一)介绍 视图(view)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了查询的SQL逻辑&…...

DNS隧道穿透
介绍: DNS隧道,是隧道技术中的一种。当我们的HTTP、HTTPS这样的上层协议、正反向端口转发都失败的时候,可以尝试使用DNS隧道。DNS隧道很难防范,因为平时的业务也好,使用也罢,难免会用到DNS协议进行解析&am…...

1.2 Scala变量与数据类型
一、变量声明 (一)简单说明 Scala中变量的声明使用关键字val和var。val类似Java中的final变量,也就是常量,一旦初始化将不可修改;var类似Java中的非final变量,可以被多次赋值,多次修改。 val - …...

深入探讨软件测试的质量度量指标
本文的目的是介绍项目中使用到主要质量指标,这些质量指标可以分为以下三类: 质量保证过程指标生产事故管理指标度量质量文化指标 质量保证过程指标 质量保证指标可以通过测试覆盖率来度量功能和非功能测试的覆盖率,同时也可以根据测试发现…...

6.12作业
1、pinia和vuex的区别 1.pinia没有mutations,只有state,getters,actions 2.pinia分模块不需要modules (之前vuex分模块需要modules) 3.pinia体积更小(性能更好) 4.pinia可以直接修改state数据 2、Vue2和vue3的响应式原理分别是什么&#x…...

RabbitMQ集群部署之镜像模式
RabbitMQ集群的普通模式中,一旦创建队列的主机宕机,队列就会不可用。不具备高可用能力。如果要解决这个问题,必须使用官方提供的镜像集群方案。 官方文档地址:https://www.rabbitmq.com/ha.html 1.镜像模式的特征 默认情况下&a…...

【算法】Remove Zero Sum Consecutive Nodes from Linked List 从链表中删去总和值为零的连续节点
文章目录 Remove Zero Sum Consecutive Nodes from Linked List 从链表中删去总和值为零的连续节点问题描述:分析代码 Remove Zero Sum Consecutive Nodes from Linked List 从链表中删去总和值为零的连续节点 问题描述: 给你一个链表的头节点 head&am…...

音悦台项目测试报告
文章目录 项目背景项目功能测试计划与设计功能测试自动化测试 测试结果功能测试结果UI自动化测试结果 项目背景 现如今人们的生活压力大,容易使人疲惫,为了使得人们在闲暇之余可以听音乐放松,为此设计出一款轻量的听音乐网站,快速…...

数据库存储过程和函数
MySQL存储过程和存储函数 MySQL中提供存储过程(procedure)与存储函数(function)机制,我们先将其统称为存储程序,一般的SQL语句需要先编译然后执行,存储程序是一组为了完成特定功能的SQL语句集&…...

Spring依赖注入有哪些?各有什么优缺点?
文章目录 前言概述一、属性注入1.1 实例1.2 优点1.3 缺点 二、Setter注入2.1 实例2.2 优点2.3 缺点 三、 构造方法注入3.1 实例3.2 优点3.3 缺点 四、扩展 前言 IoC和DI是Spring中重要的两个概念,其中IoC指的是控制反转,DI(依赖注入)指的是IoC的具体实现…...

java八股文-并发篇
并发篇 1. 线程状态 要求 掌握 Java 线程六种状态掌握 Java 线程状态转换能理解五种状态与六种状态两种说法的区别 六种状态及转换 分别是 新建 当一个线程对象被创建,但还未调用 start 方法时处于新建状态此时未与操作系统底层线程关联 可运行 调用了 start …...

Elasticsearch8.6.0安装
Elasticsearch 8.5.0 安装 Elasticsearch 简介Elasticsearch 8.6.0 安装创建网络拉取镜像运行镜像设置密码修改kibana配置绑定ES代码绑定:手动绑定: 配置ik分词器扩展词词典停用词词典 Elasticsearch 简介 Elasticsearch(ES) 是一…...

Vue - 第五天 动态组件 插槽 自定义指令
动态组件& 插槽& 自定义指令 一、动态组件1.什么是动态组件2.如何实现动态组件渲染3.使用 keep-alive 保持状态4. keep-alive 对应的生命周期函数5. keep-alive 的 include 属性6.动态展示左右组件7.例子 二、插槽1.什么是插槽2.体验插槽的基础用法2.1 没有预留插槽的内…...

如何开展web自动化测试
Web 自动化是指使用测试脚本在 Web 上自动执行任务。它包括填写表单、导航网页、单击链接或按钮以及从网站中提取数据等任务。 它可用于各种目的,例如自动输入数据或测试网站的功能。有几种工具和编程语言可用于自动化网络上的任务,包括Selenium&#x…...

【博学谷学习记录】超强总结,用心分享 | 架构师 Maven学习总结
文章目录 Maven基本1.什么是Maven2.为什么用Maven?(1)jar 包的规模(2) jar 包的来源(3)jar 包之间的依赖关系 3.Maven目录结构4.maven仓库配置 Pom层次Pom文件简介Super POM 依赖管理1 依赖传递2 传递性依…...

PPT里文字太多如何排版-一口气教你7种布局瞬间让PPT高大上起来
简介 这是我们学PPT处于初级到中级进化阶段常做的一件事,就是拿了这种纯文字类版面来做布局。而且这种文字都是政企类的、相当苦涩难懂、无法创意。 因此我们会要求使用7种排版来优化这个版面。这和达芳奇画鸡蛋很像,这样的练习需要坚持一段时间,就是拿了纯文字来beautifu…...

Whistle(基于 Node 实现的跨平台抓包调试工具)的使用
Whistle(基于 Node 实现的跨平台抓包调试工具)的使用 基于Node实现的跨平台抓包调试工具 可以劫持网络请求,并进行请求和响应的修改,来提高我们的开发调试效率 1.一键安装(装包/证书) npm i -g whistle && w2 start --init 证书的问题 安装…...

数学模型:Python实现非线性规划
上篇文章:整数规划 文章摘要:非线性规划的Python实现。 参考书籍:数学建模算法与应用(第3版)司守奎 孙玺菁。 PS:只涉及了具体实现并不涉及底层理论。学习底层理论以及底层理论实现:可以参考1.最优化模型与算法——基于…...

Docker网路模型(四)使用 bridge 网络
使用 bridge 网络 在计算机网络中,一个 bridge(网桥)是一个链路层设备,负责在不同的网段之间转发信息。 bridge 可以是真实的硬件设备也可以是由宿主机底层提供的软件模拟设备。 在 Docker 中,bridge 网络使用了软件…...

数据结构与算法之美 | 排序(2)
归并排序(Merge Sort) 基本思想: 如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。 def merge_sort…...