Linux Awk 深度解析:10个生产级自动化与云原生场景
看图猜诗,你有任何想法都可以在评论区留言哦~
摘要
Awk 作为 Linux 文本处理三剑客中的“数据工程师”,凭借字段分割、模式匹配和数学运算三位一体的能力,成为处理结构化文本(日志、CSV、配置文件)的终极工具。本文聚焦自动化与云原生环境高频需求,覆盖日志聚合、数据清洗、性能分析、实时监控等场景,提供可直接复用的 Awk 代码模板与深度原理剖析。
文章目录
- 一、Awk 的优势
- 1.1 Awk 核心特性
- 1.2 与 Sed/Grep 横向对比
- 二、安装与验证
- 2.1 安装方法
- 2.2 版本验证
- 三、高频功能使用技巧
- 3.1 基础字段操作
- 3.2 统计与计算
- 3.3 高级文本处理
- 四、生产实际案例
- 4.1 Nginx 访问日志分析报表
- 4.2 实时监控服务器负载
- 4.3 MySQL 慢查询日志分析
- 4.4 实时监控 Pod 日志关键事件
- 4.5 统计节点资源利用率 Top 排名
- 4.6 自动化生成 Deployment 资源报告
- 4.7 分析 Ingress 访问日志(按状态码聚合)
- 4.8 动态计算 HPA 扩缩容阈值
- 5.9 ETCD 性能监控
- 4.10 CI/CD 流水线质量分析
- 五、常见问题处理
- 5.1 字段分隔符不生效
- 5.2 处理大文件性能低下
- 5.3 正则表达式匹配异常
- 六、结语
一、Awk 的优势
1.1 Awk 核心特性
- 字段自动分割:默认以空格/Tab 分割行数据,
$1
、$2
直接访问字段。 - 内置变量:
NR
(行号)、NF
(字段数)、FS
(字段分隔符)等。 - 数学计算:支持数值运算、数组、自定义函数。
- 模式-动作模型:
模式 { 动作 }
结构实现条件过滤与操作。
1.2 与 Sed/Grep 横向对比
工具 | Awk | Sed | Grep |
---|---|---|---|
定位 | 字段级处理 + 逻辑控制 | 行级文本替换/删除 | 行级文本搜索 |
优势 | 报表生成、数据统计 | 流式编辑、正则替换 | 快速过滤、模式匹配 |
场景 | 结构化数据分析 | 非交互式批量修改 | 关键字检索 |
总结:Awk 是处理结构化数据(如日志、CSV)的首选工具,Sed 擅长流式编辑,Grep 专注快速过滤。
二、安装与验证
2.1 安装方法
- Linux/Unix:默认预装(通常为 GNU Awk 或 BSD Awk)。
- macOS:系统自带 BSD Awk,安装 GNU 版本:
brew install gawk # 使用 gawk 命令调用
- Windows:通过 WSL、Cygwin 或 Git Bash 使用。
2.2 版本验证
# GNU Awk 显示 "GNU Awk"
linux01@linux01:~/data/awk$ awk --version
GNU Awk 5.2.1, API 3.2, PMA Avon 8-g1, (GNU MPFR 4.2.1, GNU MP 6.3.0)
Copyright (C) 1989, 1991-2022 Free Software Foundation.
三、高频功能使用技巧
3.1 基础字段操作
提取特定列:
# 提取日志的第1列(IP)和第7列(请求路径)
awk '{print $1, $7}' access.log
自定义分隔符:
# 处理 CSV 文件(逗号分隔)
awk -F',' '{print $2, $3}' data.csv
条件过滤:
# 筛选 HTTP 状态码为 500 的行
awk '$9 == 500 {print $0}' access.log
3.2 统计与计算
求和与平均值:
# 统计总请求流量(第10列为字节数)
awk '{sum += $10} END {print "Total Traffic:", sum/1024/1024 "MB"}' access.log
分组统计:
# 按 IP 统计访问次数
awk '{ip_count[$1]++} END {for (ip in ip_count) print ip, ip_count[ip]}' access.log
最大值/最小值:
# 找出响应时间最大值(假设第4列为时间)
awk 'max < $4 {max = $4} END {print "Max Response Time:", max}' app.log
3.3 高级文本处理
多文件合并处理:
# 合并多个日志文件并去重
awk '!seen[$0]++' *.log
数据格式化输出:
# 生成格式化报表(列对齐)
awk '{printf "%-15s %-10s %-8d\n", $1, $7, $9}' access.log
正则表达式匹配:
# 匹配包含 "error" 或 "500" 的行
awk '/error|500/ {print NR, $0}' app.log
四、生产实际案例
4.1 Nginx 访问日志分析报表
需求:生成每小时请求量、流量、TOP 10 IP 的统计报表。
日志格式:
192.168.1.1 - [01/Oct/2024:12:00:01 +0800] "GET /api/users HTTP/1.1" 200 1234
Awk 脚本:
awk -F'[ :]' '
{ # 提取小时(第4列) hour = substr($4, 1, 2) # 统计每小时数据 req_count[hour]++ traffic[hour] += $NF ip_count[$1]++
}
END { # 输出每小时统计 print "===== Hourly Report =====" for (h in req_count) { printf "[%02d:00] Requests: %d, Traffic: %.2fMB\n", h, req_count[h], traffic[h]/1024/1024 } # 输出 TOP 10 IP print "\n===== TOP 10 IP =====" sort = "sort -k2 -nr | head -n10" for (ip in ip_count) { print ip, ip_count[ip] | sort }
}' access.log
输出:
===== Hourly Report =====
[12:00] Requests: 5, Traffic: 0.00MB===== TOP 10 IP =====
192.168.1.1 5
4.2 实时监控服务器负载
需求:每秒采集 CPU 负载,超过阈值触发告警。
命令组合:
while true; do uptime | awk '{ load = $(NF-2) # 获取1分钟负载 threshold = 5 if (load > threshold) { system("echo \047High load detected: " load "\047 | mail -s 'ALERT' admin@example.com") } }' sleep 1
done
4.3 MySQL 慢查询日志分析
需求:提取执行时间超过 2 秒的 SQL 及其平均耗时。
日志片段:
# Time: 2024-10-01T12:00:01.123456Z
# User@Host: root[root] @ localhost [] Id: 123
# Query_time: 2.5 Lock_time: 0.001 Rows_examined: 1000
SELECT * FROM orders WHERE ...;
Awk 脚本:
awk '
/^# Query_time:/ { # 提取查询时间 query_time = $3 getline # 读取下一行(SQL语句) if (query_time > 2) { print "Query:", $0 print "Time:", query_time "s\n" }
}
' slow.log
输出:
Query: SELECT * FROM orders WHERE ...;
Time: 2.5s
4.4 实时监控 Pod 日志关键事件
需求:从滚动更新的 Pod 日志中过滤 OOMKilled
或 CrashLoopBackOff
事件,触发告警。
命令:
kubectl logs -f pod/app --tail=100 | awk '/OOMKilled|CrashLoopBackOff/ { system("echo \047[CRITICAL] " $0 "\047 | tee -a /var/log/k8s_alert.log") system("curl -X POST http://alert-api:8080/trigger -d \047" $0 "\047")
}'
输出:
[CRITICAL] Error: Container exited with code 137 (OOMKilled)
4.5 统计节点资源利用率 Top 排名
需求:分析 kubectl top nodes
输出,找出 CPU/内存负载最高的节点。
命令:
kubectl top nodes --no-headers | awk '
{ cpu[$1] = substr($2, 1, length($2)-1) # 去除"m"单位 mem[$1] = substr($3, 1, length($3)-2) # 去除"Mi"单位
}
END { print "=== CPU Top ===" sort = "sort -k2 -nr | head -n3" for (node in cpu) print node, cpu[node] | sort close(sort) print "\n=== Memory Top ===" sort = "sort -k2 -nr | head -n3" for (node in mem) print node, mem[node] | sort
}'
输出:
=== CPU Top ===
node-3 8900
node-1 7800
node-5 6500
4.6 自动化生成 Deployment 资源报告
需求:统计所有 Deployment 的副本数、镜像版本及最近重启次数。
命令:
kubectl get deployments -o json | jq -c '.items[] | {name:.metadata.name, replicas:.status.replicas, image:.spec.template.spec.containers[0].image, restarts:.status.conditions[0].lastUpdateTime}' | awk -F'"' '
{ split($0, arr, ",") gsub(/[{}]/, "", arr[1]) print arr[1]
}'
输出:
name=frontend replicas=3 image=nginx:1.23 restarts=2024-10-01T12:00:00Z
name=backend replicas=5 image=java:11 restarts=2024-10-01T11:30:00Z
4.7 分析 Ingress 访问日志(按状态码聚合)
需求:统计 Nginx Ingress 日志中不同 HTTP 状态码的请求占比。
日志格式:
192.168.1.1 - [01/Oct/2024:12:00:01 +0800] "GET /api/users HTTP/2" 200 1234
Awk 脚本:
kubectl logs -l app=nginx-ingress --tail=1000 | awk '
{ status = $9 count[status]++ total++
}
END { for (s in count) { printf "Status %s: %.2f%% (%d requests)\n", s, (count[s]/total)*100, count[s] }
}'
输出:
Status 200: 85.30% (853 requests)
Status 404: 8.70% (87 requests)
Status 500: 6.00% (60 requests)
4.8 动态计算 HPA 扩缩容阈值
需求:根据历史 Prometheus 指标数据,自动生成 HPA 推荐的 CPU/内存阈值。
数据源:
timestamp,CPU_usage,Memory_usage
1696147200,45,60
1696147260,52,65
Awk 分析:
curl http://prometheus:9090/api/v1/query?query=container_cpu_usage | jq .data.result[].value[1] | awk '
BEGIN { max_cpu=0; max_mem=0 }
NR%2==1 { cpu=$0 }
NR%2==0 { mem=$0 if (cpu > max_cpu) max_cpu = cpu if (mem > max_mem) max_mem = mem
}
END { print "建议 CPU 阈值:", max_cpu * 1.2 print "建议内存阈值:", max_mem * 1.15
}'
输出:
建议 CPU 阈值: 0
建议内存阈值: 1.95057e+09
5.9 ETCD 性能监控
需求:分析 ETCD 日志中的写操作耗时。
日志格式:
2023-10-01 12:00:01.123 INFO etcdserver: finish committing ... took=142.123ms
2023-10-01 12:00:01.123 INFO etcdserver: finish committing ... took=133.554ms
Awk 分析:
ssh etcd-node cat /var/log/etcd.log | awk '/finish committing/ { match($0, /took=([0-9.]+)ms/, arr) sum += arr[1] count++
}
END { print "ETCD 平均写耗时:", sum/count "ms"
}'
输出:
ETCD 平均写耗时: 137.839ms
4.10 CI/CD 流水线质量分析
需求:统计 Jenkins 构建日志中的成功率与平均耗时。
日志格式:
Build #123 SUCCESS duration=2m30s
Build #124 FAILURE duration=1m45s
Awk 脚本:
cat jenkins.log | awk '
{ success += /SUCCESS/?1:0 total++ match($0, /duration=([0-9]+)m([0-9]+)s/, arr) sec = arr[1]*60 + arr[2] sum_sec += sec
}
END { print "成功率:", (success/total)*100 "%" print "平均耗时:", sum_sec/total "秒"
}'
输出:
成功率: 50%
平均耗时: 127.5秒
五、常见问题处理
5.1 字段分隔符不生效
问题:-F
参数指定分隔符后字段仍错误。
解决:
- 检查隐藏字符(如
\r
):awk -F',' '{sub(/\r/,"",$2); print $2}' data.csv
5.2 处理大文件性能低下
优化方案:
- 禁用默认字段分割:
awk -n '{...}' huge.log
- 使用
mawk
(更快实现):mawk '{...}' huge.log
5.3 正则表达式匹配异常
调试技巧:
- 打印匹配行号与内容:
awk '/pattern/ {print NR, $0}' file
六、结语
Awk 的核心价值在于将文本数据转化为结构化信息,通过简洁的脚本实现复杂的数据加工与统计。在日志分析、监控告警、报表生成等场景中,Awk 的灵活性与性能远超通用编程语言。掌握其核心语法(如字段操作、数组统计、管道协同),可显著提升运维自动化水平。
延伸学习:
- GNU Awk 用户指南
- 《Effective Awk Programming》书籍
相关文章:
Linux Awk 深度解析:10个生产级自动化与云原生场景
看图猜诗,你有任何想法都可以在评论区留言哦~ 摘要 Awk 作为 Linux 文本处理三剑客中的“数据工程师”,凭借字段分割、模式匹配和数学运算三位一体的能力,成为处理结构化文本(日志、CSV、配置文件)的终极工具。本文聚…...
无人设备遥控之调度自动化技术篇
无人设备遥控器的调度自动化技术是现代科技发展的重要成果,它通过集成先进的通信、控制、传感器及人工智能技术,实现了对无人设备的高效、精准调度与自动化管理。 一、核心技术 无线通信技术 调度自动化依赖于高速、稳定的无线通信网络(如5…...
STM32F407 HAL库使用 DMA_Normal 模式实现 UART 循环发送(无需中断)
在 STM32 开发中,很多人喜欢使用 DMA 来加速串口发送数据。然而,默认的 DMA 往往配合中断或使用循环模式(DMA_CIRCULAR)使用。但在某些特定需求下,我们希望: 使用 DMA_NORMAL 模式,确保 DMA 每次…...
汽车自动驾驶介绍
0 Preface/Foreword 1 介绍 1.1 FSD FSD: Full Self-Driving,完全自动驾驶 (Tesla) 1.2 自动驾驶级别 L0 - L2:辅助驾驶L3:有条件自动驾驶L4/5 :高度/完全自动驾驶...
Uniapp-小程序从入门到精通
沉淀UNIAPP项目精华模版 ******************************************************************************************************************************************* 1、数据库的导入SQL **************************************************************************…...
深度剖析操作系统核心(第一节):从X86/ARM/MIPS处理器架构到虚拟内存、分段分页、Linux内存管理,再揭秘进程线程限制与优化秘籍,助你成为OS高手!
文章目录 OS处理器X86ARMMIPSPowerPC 内存管理虚拟内存内存分段内存分页段页式内存管理Linux 内存管理 OS 处理器 常见处理器有X86、ARM、MIPS、PowerPC四种。 X86 X86架构是芯片巨头Intel设计制造的一种微处理器体系结构的统称。如果这样说你不理解,那么当我说…...
基于 EFISH-SBC-RK3588 的无人机通信云端数据处理模块方案
一、硬件架构设计 核心计算单元(EFISH-SBC-RK3588) 异构计算能力:搭载 8 核 ARM 架构(4Cortex-A762.4GHz 4Cortex-A551.8GHz),集成 6 TOPS NPU 与 Mali-G610 GPU,支持多任务并行处理…...
Unity 内置Standard Shader UNITY_BRDF_PBS函数分析 (二)
四、BRDF1_Unity_PBS // 主物理基BRDF实现 // 基于Disney工作并以Torrance-Sparrow微面模型为基础 // 公式: // BRDF kD / π kS * (D * V * F) / 4 // I BRDF * (N L) // // * NDF(法线分布函数)可根据 UNITY_BRDF_GGX 选择&#…...
GitHub万星项目维护者分享:开源协作的避坑指南
GitHub万星项目维护者分享:开源协作的避坑指南 ——开发者张三与237个文件改动PR的五年战争 序幕:深夜的炸弹 2019年夏天,张三维护的开源项目TerminalX刚突破8000星,一个标题猩红的PR突然弹出:“彻底重构࿰…...
Linux基础篇、第四章_01软件安装rpm_yum_源码安装_二进制安装
Linux基础篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! ————laowang 基础命令:rpm、yum、源码安装、二进制安装 一、rpm本地安装: (无需网络安装,无法解决软件依赖) rpm -ivh …...
焊接机排错
焊接机 一、前定位后焊接 两个机台,①极柱定位,相机定位所有极柱点和mark点;②焊接机,相机定位mark点原理:极柱定位在成功定位到所有极柱点和mark点后,可以建立mark点和极柱点的关系。焊接机定位到mark点…...
4.2 Prompt工程与任务建模:高效提示词设计与任务拆解方法
提示词工程(Prompt Engineering)和任务建模(Task Modeling)已成为构建高效智能代理(Agent)系统的核心技术。提示词工程通过精心设计的自然语言提示词(Prompts),引导大型语…...
oracle 锁的添加方式和死锁的解决
DML锁添加方式 DML 锁可由一个用户进程以显式的方式加锁,也可通过某些 SQL 语句隐含方式实现。 DML 锁有三种加锁方式:共享锁方式、独占锁方式、共享更新。 共享锁,独占锁用于 TM 锁,共享锁用于 TX 锁。 1)共享方式的表级锁 共享方…...
Nginx 二进制部署与 Docker 部署深度对比
一、核心概念解析 1. 二进制部署 通过包管理器(如 apt/yum)或源码编译安装 Nginx,直接运行在宿主机上。其特点包括: 直接性:与操作系统深度绑定,直接使用系统库和内核功能 。定制化:支持通过…...
以太网的mac帧格式
一.以太网的mac帧 帧的要求 1.长度 2.物理层...
每日算法-250424
每日算法打卡 (24/04/25) - LeetCode 2971 & 1647 记录一下今天解决的两道 LeetCode 题目 2971. 找到最大周长的多边形 题目 思路 贪心 一个基本的多边形构成条件是:最长边必须小于其他所有边的长度之和。 为了找到周长最大的多边形,我们应该尽可能…...
在本地部署n8n:完整指南
n8n是一个强大的工作流自动化工具,可以帮助你连接不同的应用程序和服务,无需编写复杂的代码。本指南将带你完成在本地计算机上部署n8n的完整过程。 什么是n8n? n8n(发音为"n-eight-n")是一个开源的工作流自…...
棋盘格角点检测顺序问题
文章目录 前言一、OpenCV函数测试二、原因分析三、libcbdetect修改总结 前言 棋盘格角点检测在相机拼接、机械臂手眼标定中等应用很广泛,通常也要求尽量各种角度摆放从而保证标定精度。然后就自然想到了这个问题:如果棋盘格任意角度摆放怎么能对应上角点…...
C++之类和对象:定义,实例化,this指针,封装
C语言是面向过程的,C是面向对象的,利用对象交互,接口完成事情。 类的定义: 我们在C语言中可以用struct创建自定义结构体,在C中可以在结构体中定义函数了,这种就被称为类。 #include<iostream> usi…...
Ubuntu系统下交叉编译iperf3
一、参考资料 Linux下iperf3移植到arm下测试100M网口-CSDN博客 Iperf3移植到ARM Linux及使用教程-CSDN博客 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编…...
游戏引擎学习第243天:异步纹理下载
仓库 https://gitee.com/mrxiao_com/2d_game_6 https://gitee.com/mrxiao_com/2d_game_5 回顾并为今天设定阶段 目前的开发工作主要回到了图形渲染相关的部分。我们之前写了自己的软件渲染器,这个渲染器性能意外地好,甚至可以以相对不错的帧率运行过场…...
27、Session有什么重⼤BUG?微软提出了什么⽅法加以解决?
Session的重大BUG 1、进程回收导致Session丢失 原理: IIS的进程回收机制会在系统繁忙、达到特定内存阈值等情况下,自动回收工作进程(w3wp.exe)。由于Session数据默认存储在进程内存中,进程回收时这些数据会被清除。 …...
机器学习在网络安全中的应用:守护数字世界的防线
一、引言 随着信息技术的飞速发展,网络安全问题日益凸显,成为全球关注的焦点。传统的网络安全防护手段,如防火墙、入侵检测系统(IDS)和防病毒软件,虽然在一定程度上能够抵御攻击,但在面对复杂多…...
从数据到智慧:解密机器学习的自主学习密码
在数字洪流奔涌的时代,每一次点击、每一行代码、每一条传感器数据都在生成海量信息。传统编程如同精心设计的齿轮组,需要工程师逐行编写规则;而机器学习则打破这一范式,赋予机器从数据中自主提炼规律、总结模式的超能力。这种能力…...
Trae或者VsCode无法识别相对路径(不自动切换工作目录)
在VsCode中或者Trae中,只要是在vscode的基础上修改得到的编辑器,都默认没有勾选自动选择当前文件路径为工作路径,因此需要手动修改工作路径或者设置,否则无法识别相对路径,PyCharm中就不会出现这种问题。 解决方法&…...
解决VSCode每次SSH连接服务器时,都需要下载vscode-server
如下图所示,本地下载或者在服务器终端上运行wget指令获得vscode服务器包 注意,解压完成后,需要修改文件名为你本地vscode的commit ID...
架构-系统工程与信息系统基础
一、系统工程核心知识 1. 系统工程定义 本质:一种组织管理技术,从整体出发分析系统要素(组成、结构、信息流、控制机制),追求“整体最优”,借助计算机实现规划、设计、管理、控制的优化。目标:…...
矩阵运算和线性代数操作开源库
用于矩阵运算和线性代数操作常用的开源库推荐,涵盖不同编程语言和硬件平台: C/C 库 Eigen 特点:高性能的模板库,支持矩阵/向量运算、线性求解、特征值计算等,无需依赖外部BLAS/LAPACK。 官网:https://eig…...
无标注文本的行业划分(行业分类)算法 —— 无监督或自监督学习
对于无标注文本的行业划分(行业分类),属于典型的无监督或自监督学习任务。以下是几种常见的算法方法及实现思路,适用于缺乏标注数据的场景: 一、基于关键词匹配的规则方法 核心思想:通过预定义的行业关键…...
电子病历高质量语料库构建方法与架构项目(计划篇)
电子病历(EMR)作为医疗信息化的重要产物,包含了丰富的医疗信息和临床知识,是辅助临床决策、药物挖掘和医学研究的重要资源。然而,电子病历数据具有非结构化、噪声大、专业性强等特点,如何构建高质量电子病历语料库成为医疗自然语言处理领域的核心挑战。本全计划将从项目背景…...
什么混合检索?在基于大模型的应用开发中,混合检索主要解决什么问题?
混合检索的定义 混合检索(Hybrid Retrieval)是一种结合多种检索技术优势的信息检索方法,旨在通过整合不同检索策略提升检索系统的准确性、召回率和适应性。其核心思想是将基于关键词的检索(如BM25、TF-IDF)与基于语义的检索(如向量检索、深度学习模型)相结合,以应对单…...
优化uniappx页面性能,处理页面滑动卡顿问题
问题:在页面遇到滑动特别卡的情况就是在页面使用了动态样式或者动态类,做切换的时候页面重新渲染导致页面滑动卡顿 解决:把动态样式和动态类做的样式切换改为通过获取元素修改样式属性值 循环修改样式示例 bannerList.forEach((_, index)…...
Yocto meta-toradex-security layer 创建独立数据分区
By Toradex 胡珊逢 简介 Toradex 为其产品使用的软件系统如 Linux 提供了诸多的安全功能,例如 Secure Boot、分区加密、OP-TEE 等,帮助用户应对安全合规。这些功能可以通过在 Yocto Project 中添加由 Toradex 开发的 meta-toradex-securitylayer 被轻松…...
uniapp 安卓离线本地打包,Android Studio生成apk包
第一步:HbuilderX生成本地资源包 下载最新的SDK 下载完后压缩下来是这样的 将HbuilderX生成的复制到这里,替换 Android Studio引入下载的最新文件里的HBuilder-Integrate-AS目录 好,接下来开始修改配置 把你的证书签名ÿ…...
C语言教程(十四):C 语言指针详解
一、指针的基本概念 指针是一个变量,其值为另一个变量的内存地址。简单来说,指针指向了内存中的某个位置,通过指针可以间接访问该位置存储的数据。指针的使用可以让程序更加高效地处理数据,特别是在处理数组、动态内存分配等方面。…...
2025年04月24日Github流行趋势
项目名称:markitdown 项目地址url:https://github.com/microsoft/markitdown项目语言:Python历史star数:53,351今日star数:822项目维护者:afourney, gagb, sugatoray, PetrAPConsulting, l-lumin项目简介&a…...
切割PDF使用python,库PyPDF2
使用 Python 将大型 PDF 文件分割成多个小文件 理解任务 将一个 170M 的 PDF 文件分割成多个 10M 左右的小文件。这在处理大型 PDF 文件时非常有用,例如: 减少单个文件的大小,方便传输或存储分别处理不同的文件部分提高 PDF 处理的效率 选…...
网络IP冲突的成因与解决方案
网络IP冲突的成因与解决方案 一、IP冲突的常见现象与危害二、IP冲突的常见原因三、6种实用解决方案四、预防IP冲突的4个最佳实践五、总结 前言 肝文不易,点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。 作者:神的孩子…...
python版本得数独游戏
python版本得数独游戏 游戏说明: 游戏使用9x9数独棋盘,.表示可填写的空格 输入格式为行,列,数值(如3,5,7表示第3行第5列填7) 系统会自动检查以下内容: 输入格式是否正确 数字是否在1-9范围内 是否修改固定数字 是…...
64位系统上编译32位openh264 x264
在64位系统上要使用i386(32位库)的时候,有些是找不到apt可以安装的版本,所以需要手动编译安装,下面是openh264和x264的编译过程。 默认编译openh264 git clone https://github.com/cisco/openh264make ARCHi386 OSlinux PREFIX/lib/i386-li…...
加深对vector理解OJ题
17. 电话号码的字母组合 - 力扣(LeetCode) OJ(一)电话号码的字母组合 思路:这里以引用leetcode里面的一个大佬里面的图 1.这道题中,我们用递归的方法来写。 为了简洁展示,我们举例子”456“&am…...
协作开发攻略:Git全面使用指南 — 第三部分 特殊应用场景
协作开发攻略:Git全面使用指南 — 第三部分 特殊应用场景 Git 是一种分布式版本控制系统,用于跟踪文件和目录的变更。它能帮助开发者有效管理代码版本,支持多人协作开发,方便代码合并与冲突解决,广泛应用于软件开发领域…...
机器学习(9)——随机森林
文章目录 1. 随机森林的基本原理想2. 算法流程2.1. 数据采样(Bootstrap):2.2. 构建决策树:2.3. 聚合预测: 3. 随机森林的构建过程3.1. 数据集的随机抽样3.2. 决策树的训练3.3. 树的生长3.4. 多棵树的集成3.5. 输出预测…...
(第三篇)Springcloud之Ribbon负载均衡
一、简介 1、介绍 Spring Cloud Ribbon是Netflix发布的开源项目,是基于Netflix Ribbon实现的一套客户端负载均衡的工具。主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时&…...
Linux并发与竞争:从生活例子到内核实战
Linux并发与竞争:从生活例子到内核实战 一、并发与竞争:多车道公路的交通问题 想象一条四车道的高速公路(多核CPU),所有车辆(线程/进程)都想通过同一个收费站(共享资源)…...
【金仓数据库征文】——金仓数据库:国产数据库的卓越之选
目录 一、金仓数据库的核心技术优势 (一)强大的事务处理能力 (二)高度安全 (三)全面兼容与深度适配 (四)强大的扩展性 (五)智能便捷的工具 二、电信行…...
人脸识别考勤系统实现教程:基于Face-Recognition、OpenCV与SQLite
引言 随着人工智能技术的飞速发展,人脸识别技术已广泛应用于安防、金融、教育等多个领域。本文将带领大家利用Python的face-recognition库、OpenCV和SQLite数据库,从零开始构建一个具备异常报警功能的人脸识别考勤系统。该系统能够实时检测视频流中的人…...
Golang 闭包学习
引言 在平常的 Go 语言开发中,常常需要将一段函数逻辑封装起来,异步执行、作为回调传递,甚至保持某些运行时状态。此时,闭包成为一种非常自然的编程手段。它允许我们在函数内部“记住”外部作用域中的变量,从而实现变…...
Trae+DeepSeek学习Python开发MVC框架程序笔记(四):使用sqlite验收用户名和密码
继续通过Trae向DeepSeek发问并修改程序,实现程序运行时生成数据库,用户在系统登录页面输入用户名和密码后,控制器通过模型查询用户数据库表来验证用户名和密码,验证通过后显示登录成功页面,验证失败则显示登录失败页面…...
【mdlib】0 全面介绍 mdlib - Rust 实现的 Markdown 工具集
mdlib 是由开发者 bahdotsh 创建的一个多功能 Markdown 工具集合,包含两个主要组件:一个轻量级 Markdown 解析库和一个功能完善的个人 Wiki 系统。该项目完全采用 Rust 实现,兼具高性能与跨平台特性。 核心组件 Markdown 解析库 特性&#…...