awk命令进阶
1.连接文件
awk 'NR==FNR{a[$1]=$0;next} NR!=FNR{ if(($5) in a) print a[$1],$0 }' file1 file2
命令详解:
这个命令的目的是将 file1
和 file2
基于某个共同字段进行连接(类似于 SQL 中的 JOIN 操作)。下面我们逐步解析它的工作原理。
1. NR==FNR{a[$1]=$0;next}
-
NR==FNR
:-
NR
是当前处理的总行号(包括所有文件)。 -
FNR
是当前文件的行号(只针对当前文件)。 -
当
NR==FNR
时,表示正在处理第一个文件(file1
)。
-
-
a[$1]=$0
:-
将
file1
的每一行的内容($0
)存储到关联数组a
中,键是第一个字段($1
)。 -
例如,如果
file1
的一行是1 Alice
,那么a[1]="1 Alice"
。
-
-
next
:-
跳过后续的命令,直接处理下一行。这意味着只有
file1
会被处理,file2
暂时不会被处理。
-
2. NR!=FNR{ if(($5) in a) print a[$1],$0 }
-
NR!=FNR
:-
当
NR!=FNR
时,表示正在处理第二个文件(file2
)。
-
-
if(($5) in a)
:-
检查
file2
的第五个字段($5
)是否存在于数组a
中(即是否与file1
的第一个字段匹配)。
-
-
print a[$1],$0
:-
如果匹配成功,打印
file1
中对应的行(a[$1]
)和file2
的当前行($0
)。
-
3. 问题分析
你的命令逻辑基本正确,但有一个小问题:
-
在
print a[$1],$0
中,$1
应该是$5
,因为你是用file2
的第五个字段($5
)来匹配file1
的第一个字段($1
)。 -
正确的写法应该是:
print a[$5],$0
。
4. 修正后的命令
awk 'NR==FNR{a[$1]=$0;next} ($5 in a) {print a[$5],$0}' file1 file2
5. 示例
假设有两个文件:
file1
:
1 Alice
2 Bob
3 Charlie
file2
:
10 20 30 40 1
11 21 31 41 2
12 22 32 42 4
运行命令后的输出:
1 Alice 10 20 30 40 1
2 Bob 11 21 31 41 2
解释:
-
file2
的第一行第五个字段是1
,与file1
的第一行匹配,因此输出1 Alice 10 20 30 40 1
。 -
file2
的第二行第五个字段是2
,与file1
的第二行匹配,因此输出2 Bob 11 21 31 41 2
。 -
file2
的第三行第五个字段是4
,在file1
中没有匹配,因此不输出。
6. 总结
-
你的命令逻辑是正确的,但需要将
print a[$1],$0
改为print a[$5],$0
。 -
修正后的命令可以正确实现基于字段的 JOIN 操作。
-
如果还有其他需求(例如输出格式调整),可以进一步修改
print
部分。
awk
是一种强大的文本处理工具,支持各种进阶操作,包括条件判断、循环、数组、函数等。以下是一些常见的 awk
进阶操作及其示例:
1. 条件判断
awk
支持 if-else
条件判断,可以根据条件执行不同的操作。
示例:
awk '{if ($1 > 50) print $1, "High"; else print $1, "Low"}' file.txt
-
如果第一个字段大于 50,输出
High
,否则输出Low
。
扩展用法
示例 1:多条件判断
awk '{if ($1 > 50) print $1, "High"; else if ($1 > 30) print $1, "Medium"; else print $1, "Low"}' file.txt
-
如果第一个字段大于 50,输出
High
。 -
如果第一个字段大于 30 但小于等于 50,输出
Medium
。 -
否则,输出
Low
。
示例 2:结合正则表达式
awk '{if ($1 ~ /^[0-9]+$/) print $1, "Number"; else print $1, "Not a number"}' file.txt
-
如果第一个字段是纯数字,输出
Number
。 -
否则,输出
Not a number
。
示例 3:统计数量
awk '{if ($1 > 50) count++} END {print "High count:", count}' file.txt
awk '{if ($1 > 50) {count++; print $1, "big"} else {print $1, "small"}} END {print "High count:", count > "result.txt"}' file.txt
-
统计第一个字段大于 50 的行数,并在最后输出结果。
2. 循环
awk
支持 for
和 while
循环,可以遍历数组或重复执行某些操作。
示例 1:for
循环
awk '{for (i=1; i<=NF; i++) print $i}' file.txt
-
遍历每一行的所有字段并打印。
实际应用场景
这种结合循环和字段处理的功能在实际工作中有很多应用场景。以下是一些常见的例子:
1. 字段拆分与提取
-
场景:
-
文件中的每一行包含多个字段,需要将每个字段提取出来单独处理。
-
-
示例:
-
提取日志文件中的特定字段(如时间戳、错误码等)。
-
提取 CSV 文件中的某一列数据。
-
2. 数据清洗
-
场景:
-
文件中的数据格式不规范,需要对每个字段进行清洗(如去除空格、转换大小写等)。
-
-
示例:
-
将字段中的空格替换为下划线:
awk '{for (i=1; i<=NF; i++) gsub(/ /, "_", $i); print $0}' file.txt
-
3. 字段统计
-
场景:
-
统计每个字段的某些特征(如长度、是否包含特定字符等)。
-
-
示例:
-
统计每个字段的长度:
awk '{for (i=1; i<=NF; i++) print "Field", i, "length:", length($i)}' file.txt
-
4. 数据转换
-
场景:
-
将文件中的数据转换为另一种格式(如 JSON、SQL 等)。
-
-
示例:
-
将每一行转换为 JSON 格式:
awk '{printf "{\n"; for (i=1; i<=NF; i++) printf " \"field%d\": \"%s\"", i, $i, (i<NF ? ",\n" : "\n"); print "}"}' file.txt awk '{printf "{\n"; for (i=1; i<=NF; i++) {printf " \"field%d\": \"%s\"",i,$i;if (i<NF) {printf ",\n" else {printf "\n"}};print "}"}' file
-
这是一个
awk
命令,用于将文件file.txt
中的每一行数据转换为 JSON 格式。
{printf "{\n";...; print "}" }
:对于文件file.txt
中的每一行,先打印一个左花括号{
作为 JSON 对象的开始,然后执行中间的循环和打印操作,最后打印一个右花括号}
作为 JSON 对象的结束。
for (i=1; i<=NF; i++)
:该循环从 1 开始,到NF
结束。NF
表示当前行的字段数量。对于每一行,该循环会遍历该行的每个字段。
printf " \"field%d\": \"%s\"", i, $i, (i<NF? ",\n" : "\n")
:在循环中,对于每个字段,将其打印为 JSON 格式的键值对。
"field%d"
:使用printf
的格式化功能,将当前字段的编号i
作为键的一部分,格式为"field1"
、"field2"
等。
"%s"
:将当前字段的内容$i
作为键对应的值。
(i<NF? ",\n" : "\n")
:根据当前字段是否为该行的最后一个字段,决定是否打印逗号。如果i
小于NF
,即不是最后一个字段,打印逗号和换行符,\n
;如果是最后一个字段,只打印换行符\n
。
示例:
假设 file.txt
的内容如下
Alice 25 Female
Bob 30 Male
运行该 awk
命令后,输出如下:
{"field1": "Alice","field2": "25","field3": "Female"
}
{"field1": "Bob","field2": "30","field3": "Male"
}
使用说明:
将上述 awk
命令在终端中运行,确保文件 file.txt
存在。例如,如果你在 Linux 或 macOS 系统的终端中,可以直接输入:
awk '{printf "{\n"; for (i=1; i<=NF; i++) printf " \"field%d\": \"%s\"", i, $i, (i<NF? ",\n" : "\n"); print "}" }' file.txt
此命令会逐行读取 file.txt
的内容,将每行转换为一个 JSON 对象。
该命令适用于将简单的文本文件中的数据转换为基本的 JSON 格式,但需要注意,如果文件中包含特殊字符(如双引号 "
),可能会导致生成的 JSON 格式不规范,需要额外的转义处理。
可能的优化:
转义特殊字符:
如果输入文件中可能包含特殊字符,如双引号、反斜杠等,需要添加转义逻辑。例如,可以使用 gsub(/"/, "\\\"", $i)
在 printf
之前对 $i
进行转义处理,将双引号替换为 \"
。修改后的代码如下:
awk '{printf "{\n"; for (i=1; i<=NF; i++) { gsub(/"/, "\\\"", $i); printf " \"field%d\": \"%s\"", i, $i, (i<NF? ",\n" : "\n") }; print "}" }' file.txt
处理空字段:
如果文件中可能存在空字段,上述代码可能会生成不期望的 JSON 格式,例如 {"field1": "value1", "field2": "", "field3": "value3"}
。你可以添加逻辑判断字段是否为空,如果为空,将其值设置为 null
。例如:
awk '{printf "{\n"; for (i=1; i<=NF; i++) { if ($i == "") $i = "null"; else gsub(/"/, "\\\"", $i); printf " \"field%d\": \"%s\"", i, $i, (i<NF? ",\n" : "\n") }; print "}" }' file.txt
提高可读性:
可以添加更多的空格或缩进,使生成的 JSON 更具可读性,例如:
awk '{printf "{\n "; for (i=1; i<=NF; i++) { if ($i == "") $i = "null"; else gsub(/"/, "\\\"", $i); printf " \"field%d\": \"%s\"", i, $i, (i<NF? ",\n " : "\n ") }; print "}" }' file.txt
处理嵌套结构:
如果需要处理更复杂的结构,例如嵌套的 JSON 对象或数组,可能需要更复杂的 awk
逻辑或使用其他工具(如 jq
)来处理。
5. 字段过滤
-
场景:
-
根据字段的值过滤数据。
-
-
示例:
-
只输出包含数字的字段:
awk '{for (i=1; i<=NF; i++) if ($i ~ /[0-9]+/) print $i}' file.txt
-
6. 字段重组
-
场景:
-
将字段重新组合成新的格式。
-
-
示例:
-
将字段逆序输出:
awk '{for (i=NF; i>=1; i--) printf "%s ", $i; print ""}' file.txt
-
7. 多文件处理
-
场景:
-
对多个文件进行相同的字段处理。
-
-
示例:
-
对多个文件逐字段输出:
awk '{for (i=1; i<=NF; i++) print $i}' file1.txt file2.txt
-
8. 结合正则表达式
-
场景:
-
对字段进行复杂的模式匹配和替换。
-
-
示例:
-
将字段中的邮箱地址提取出来:
awk '{for (i=1; i<=NF; i++) if ($i ~ /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/) print $i}' file.txt
-
9. 生成报告
-
场景:
-
根据字段生成统计报告。
-
-
示例:
-
统计每个字段的唯一值:
awk '{for (i=1; i<=NF; i++) uniq[$i]++} END {for (key in uniq) print key, uniq[key]}' file.txt
-
10. 结合其他命令
-
场景:
-
将
awk
的输出传递给其他命令进行进一步处理。
-
-
示例:
-
将字段排序后输出:
awk '{for (i=1; i<=NF; i++) print $i}' file.txt | sort
-
示例 2:while
循环
awk '{i=1; while (i<=NF) {print $i; i++}}' file.txt
-
使用
while
循环实现同样的功能。
3. 数组
awk
支持关联数组(类似于字典或哈希表),可以用于统计、分组等操作。
示例 1:统计字段出现次数
bash
复制
awk '{count[$1]++} END {for (key in count) print key, count[key]}' file.txt
-
统计第一个字段中每个值的出现次数。
示例 2:分组求和
bash
复制
awk '{sum[$1] += $2} END {for (key in sum) print key, sum[key]}' file.txt
-
按第一个字段分组,对第二个字段求和。
4. 内置函数
awk
提供了许多内置函数,用于字符串处理、数学计算等。
示例 1:字符串长度
bash
复制
awk '{print length($0)}' file.txt
-
输出每一行的字符数。
示例 2:字符串截取
bash
复制
awk '{print substr($1, 1, 3)}' file.txt
-
输出第一个字段的前 3 个字符。
示例 3:数学函数
bash
复制
awk '{print sqrt($1)}' file.txt
-
计算第一个字段的平方根。
5. 多文件处理
awk
可以同时处理多个文件,并通过 NR
和 FNR
区分当前文件。
示例:
bash
复制
awk 'NR==FNR{a[$1]=$0; next} ($1 in a) {print a[$1], $0}' file1.txt file2.txt
-
将
file1.txt
和file2.txt
基于第一个字段进行连接。
6. 自定义变量
awk
允许定义和使用自定义变量。
示例:
bash
复制
awk '{total += $1} END {print "Total:", total}' file.txt
-
计算第一个字段的总和。
7. BEGIN 和 END 块
BEGIN
和 END
是特殊的代码块,分别在处理输入之前和之后执行。
示例:
bash
复制
awk 'BEGIN {print "Start"} {print $0} END {print "End"}' file.txt
-
在处理文件之前输出
Start
,处理完毕后输出End
。
8. 正则表达式匹配
awk
支持正则表达式,可以用于模式匹配。
示例:
bash
复制
awk '/error/ {print $0}' file.txt
-
输出包含
error
的行。
示例 2:字段匹配
bash
复制
awk '$1 ~ /^[0-9]+$/ {print $0}' file.txt
-
输出第一个字段为纯数字的行。
9. 输出重定向
awk
可以将输出重定向到文件。
示例:
bash
复制
awk '{print $1 > "output.txt"}' file.txt
-
将第一个字段写入
output.txt
文件。
10. 多条件组合
awk
支持逻辑运算符(&&
、||
、!
),可以组合多个条件。
示例:
bash
复制
awk '$1 > 50 && $2 < 100 {print $0}' file.txt
-
输出第一个字段大于 50 且第二个字段小于 100 的行。
11. 自定义字段分隔符
awk
默认使用空格作为字段分隔符,但可以通过 -F
选项或 FS
变量自定义分隔符。
示例:
bash
复制
awk -F',' '{print $1}' file.csv
-
使用逗号作为分隔符,输出第一个字段。
12. 多行记录处理
awk
默认按行处理,但可以通过设置 RS
(记录分隔符)处理多行记录。
示例:
bash
复制
awk 'BEGIN {RS="\n\n"} {print $0}' file.txt
-
将空行作为记录分隔符,处理多行记录。
13. 自定义输出格式
awk
支持 printf
,可以格式化输出。
示例:
bash
复制
awk '{printf "Name: %-10s Age: %d\n", $1, $2}' file.txt
-
格式化输出,左对齐名称并固定宽度。
14. 调用外部命令
awk
可以通过 system
函数调用外部命令。
示例:
bash
复制
awk '{system("echo " $1)}' file.txt
-
对每一行的第一个字段调用
echo
命令。
15. 函数定义
awk
允许定义自定义函数。
示例:
bash
复制
awk 'function myfunc(x) {return x*2} {print myfunc($1)}' file.txt
-
定义一个函数
myfunc
,将第一个字段的值乘以 2 并输出。
16. 处理大文件
awk
可以高效处理大文件,因为它逐行处理,不会将整个文件加载到内存中。
示例:
bash
复制
awk '{if ($1 > 1000) print $0}' largefile.txt
-
从大文件中筛选出第一个字段大于 1000 的行。
17. 处理 CSV 文件
awk
可以方便地处理 CSV 文件。
示例:
bash
复制
awk -F',' '{print $1, $3}' data.csv
-
输出 CSV 文件的第一列和第三列。
18. 处理 JSON 数据
虽然 awk
不是专门用于处理 JSON 的工具,但可以通过正则表达式提取简单 JSON 数据。
示例:
bash
复制
echo '{"name": "Alice", "age": 25}' | awk -F'"' '{print $4, $8}'
-
提取 JSON 中的
name
和age
字段。
19. 性能优化
-
使用
next
跳过不必要的行。 -
避免在循环中频繁调用外部命令。
-
尽量使用内置函数而不是自定义逻辑。
20. 调试技巧
-
使用
print
输出中间结果。 -
使用
-d
选项(如gawk
支持)启用调试模式。
通过掌握这些进阶操作,你可以更高效地使用 awk
处理复杂的文本任务。如果需要更详细的功能,可以参考 awk
的官方文档或使用 man awk
查看手册。
相关文章:
awk命令进阶
1.连接文件 awk NRFNR{a[$1]$0;next} NR!FNR{ if(($5) in a) print a[$1],$0 } file1 file2 命令详解: 这个命令的目的是将 file1 和 file2 基于某个共同字段进行连接(类似于 SQL 中的 JOIN 操作)。下面我们逐步解析它的工作原理。 1. NRF…...

解锁Java中的国密算法:安全保障的密钥
一、引言 在数字化浪潮席卷全球的当下,信息安全已然成为国家、企业乃至个人无法忽视的重要议题。国密算法,作为我国自主研发的密码算法体系,宛如坚固的盾牌,为国家信息安全筑起了一道坚不可摧的防线。它的诞生,不仅承载…...

基于迁移学习的ResNet50模型实现石榴病害数据集多分类图片预测
完整源码项目包获取→点击文章末尾名片! 番石榴病害数据集 背景描述 番石榴 (Psidium guajava) 是南亚的主要作物,尤其是在孟加拉国。它富含维生素 C 和纤维,支持区域经济和营养。不幸的是,番石榴生产受到降…...
在现有 Docker Desktop 环境下安装与配置独立 Kubernetes环境(Mac)
在现有 Docker Desktop 环境下安装与配置独立 Kubernetes 集群环境 目标 在已安装Docker Desktop自带Kubernetes的情况下,搭建一个独立 Kubernetes 集群环境。配置独立的 kubectl 工具,使其默认管理独立的 Kubernetes 集群。保留 Docker Desktop 的 Ku…...

Linux探秘坊-------3.开发工具详解(1)
1 初识vim编辑器 创建第一个vim编辑的代码 1.新建文件 2.使用vim打开 3.打开默认是命令模式,写代码需要在屏幕上输出“i”字符 1.写完代码后要按Esc键退出到指令模式2.再按shift:wq即可保存并退出vim (因为不支持鼠标,通常 使用键盘上的箭…...

Spring Boot整合Thymeleaf、JDBC Template与MyBatis配置详解
本文将详细介绍如何在Spring Boot项目中整合Thymeleaf模板引擎、JDBC Template和MyBatis,涵盖YAML配置、依赖版本匹配、项目结构设计及代码示例。 一、版本兼容性说明 Spring Boot版本与Java版本对应关系 Spring Boot 2.x:支持Java 8、11(推…...

白玉微瑕:闲谈 SwiftUI 过渡(Transition)动画的“口是心非”(下)
概述 秃头小码农们都知道,SwiftUI 不仅仅是一个静态 UI 构建框架那么简单,辅以海量默认或自定义的动画和过渡(Transition)特效,我们可以将 App 界面的绚丽升华到极致。 不过,目前 SwiftUI 中的过渡&#x…...

论文:深度可分离神经网络存内计算处理芯片
引言:SRAM - CIM芯片在处理深度可分离神经网络时面临的挑战 深度可分离卷积(Depthwise separable convolution, DSC)由逐深度卷积(DW)和逐点卷积(PW)组成,逐深度卷积用于提取空间特征ÿ…...

hdrnet,Deep Bilateral Learning for Real-Time Image Enhancement解读
论文、代码和ppt地址:Deep Bilateral Learning for Real-Time Image Enhancement 论文使用的数据集: HDR: 这是一个复杂的摄影管道,包括色彩校正、自动曝光、去雾和色调映射等操作。 MIT “FiveK” 数据集: 这个数据集由 Bychkovsky 等人 提…...

Android系统开发(十五):从 60Hz 到 120Hz,多刷新率进化简史
引言 欢迎来到“帧率探索实验室”!今天,我们要聊聊 Android 11 中对多种刷新率设备的支持。你可能会问:“这和我写代码有什么关系?”别急,高刷新率不仅仅让屏幕更顺滑,还会直接影响用户体验。想象一下&…...
js判断一个数组对象中是否有相同的值
let userTitleLevelList[{title:医生,code:20},{title:老师,code:21}]; 如果一个数组对象格式如上面。如果有一样的对象就提示。即:title和code都是一样的内容、 const hasDuplicate userTitleLevelList.some((item, index, array) > { return array.filter(…...

基于深度学习的视觉检测小项目(十五) 用户的登录界面
用户管理离不开的是消息框(QMessageBox)和对话框(QDialog),比如对话框用于用户名和密码输入,消息框用于提示登录成功、密码错误。 • 基础知识:PySide6(PyQT5)的常用对话…...

redis-排查命中率降低问题
1.命中率降低带来的问题 高并发系统,当命中率低于平常的的运行情况,或者低于70%时,会产生2个影响。 有大量的请求需要查DB,加大DB的压力;影响redis自身的性能 不同的业务场景,阈值不一样,一般…...

ui文件转py程序的工具
源博客连接: PyCharm中利用外部工具uic转成的py文件,里面全是C代码,并非python类型的代码,导致大量报错。。。_pyside6-uic为什么把ui转为了c-CSDN博客 如果想把ui文件转为py文件,首先设置pycharm的外部工具…...

Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案
作者:Wayne Gao, Yi Wang, Jie Chen, Sarika Mehta Alluxio 作为全球领先的 AI 缓存解决方案供应商, 提供针对 GPU 驱动 AI 负载的高速缓存。其可扩展架构支持数万个节点,能显著降低存储带宽的消耗。Alluxio 在解决 AI 存储挑战方面的前沿技…...
Oracle 数据库常见字段类型大全及详细解析
在工作期间会遇到数据库建表的业务,经常会使用复制粘帖等操作,而不清楚数据库的字段类型。本文记录了 Oracle 数据库常见字段类型,根据不同的数据需求,可以选择不同的字段类型来存储数据。 文章目录 一、字符类型(Char…...

U3D的.Net学习
Mono:这是 Unity 最初采用的方式,它将 C# 代码编译为中间语言 (IL),然后在目标平台上使用虚拟机 (VM) 将其转换为本地机器码执行。 IL2CPP:这是一种较新的方法,它会将 C# 代码先编译为 C 代码,再由 C 编译器…...

Tomcat下载配置
目录 Win下载安装 Mac下载安装配置 Win 下载 直接从官网下载https://tomcat.apache.org/download-10.cgi 在圈住的位置点击下载自己想要的版本 根据自己电脑下载64位或32位zip版本 安装 Tomcat是绿色版,直接解压到自己想放的位置即可 Mac 下载 官网 https://tomcat.ap…...
adb常用指令(完整版)
1、adb devices 查看是否连接到设备 2、adb install [-r] [-s] 安装app,-r强制,-s安装sd卡上 3、adb uninstall [-k] 卸载app,-k保留配置和参数 4、adb push 把本地文件上传设备 5、adb pull 下载文件到本地 6、cd D:\sdk\platform-tool…...
大数据学习(36)- Hive和YARN
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦ᾑ…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
Python爬虫实战:研究Restkit库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...
深度解析:etcd 在 Milvus 向量数据库中的关键作用
目录 🚀 深度解析:etcd 在 Milvus 向量数据库中的关键作用 💡 什么是 etcd? 🧠 Milvus 架构简介 📦 etcd 在 Milvus 中的核心作用 🔧 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...