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
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦ᾑ…...

C# ASP.NET MVC项目内使用ApiController
1.在App_Start文件夹新建WebApiConfig.cs文件,建立webApi路由的注册方法。 using System.Web.Http;namespace PrivilegeManager {public class WebApiConfig{public static void Register(HttpConfiguration config){config.MapHttpAttributeRoutes();config.Route…...

Kafka 入门与应用实战:吞吐量优化与与 RabbitMQ、RocketMQ 的对比
前言 在现代微服务架构和分布式系统中,消息队列作为解耦组件,承担着重要的职责。它不仅提供了异步处理的能力,还能确保系统的高可用性、容错性和扩展性。常见的消息队列包括 Kafka、RabbitMQ 和 RocketMQ,其中 Kafka 因其高吞吐量…...

“推理”(Inference)在深度学习和机器学习的语境
“推理”(Inference)在深度学习和机器学习的语境中,是指使用经过训练的模型对新数据进行预测的过程。将其简单地理解为“模型的应用阶段”。在这一阶段,我们不再进行模型训练,而是利用已训练好且保存下来的模型来获取对…...

字节腾讯阿里大厂面经汇总:Java集合(容器)大厂面试题及参考答案
ArrayList 的扩容机制以及删除操作的时间复杂度 ArrayList 是 Java 中非常常用的一个集合类,它是基于数组实现的动态数组。当我们创建一个 ArrayList 时,如果不指定初始容量,它会有一个默认的初始容量(通常是 10)。当我们向 ArrayList 中添加元素时,如果元素的数量达到了…...

数据结构(初阶)(一)----算法复杂度
算法复杂度 算法复杂度数据结构算法算法效率复杂度的概念 数据结构 数据结构(Data Structure)是计算机存储、组织数据的⽅式,指相互之间存在⼀种或多种特定关系的数据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤,所以我们要学各式各样的数据结…...

构建高效稳定的网络环境
概述 网络技术是当今IT行业的重要组成部分,构建高效稳定的网络环境对于企业、个人和互联网发展至关重要。本文将探讨网络技术中的关键要素,包括网络协议、网络架构、网络安全和网络优化,并提供实用的技巧和最佳实践,以帮助您构建…...

使用Edge打开visio文件
使用Edge打开visio文件 打开Edge浏览器搜索‘vsdx edge’ 打开第一个搜索结果 Microsoft Support 根据上述打开的页面进行操作 第一步:安装Visio Viewer 第二步:添加注册表 桌面新增文本文件,将下面的内容放入新建文本中,修…...

ChatGPT Prompt 编写指南
一、第一原则:明确的意图 你需要明确地表达你的意图和要求,尽可能具体、描述性、详细地描述所需的上下文、你期望的结果等。你的要求越明确,越有希望获得你想要的答案。 糟糕的案例 ❌ 写一首关于 OpenAI 的诗。 更好的案…...

蚁群算法 (Ant Colony Optimization) 算法详解及案例分析
蚁群算法 (Ant Colony Optimization) 算法详解及案例分析 目录 蚁群算法 (Ant Colony Optimization) 算法详解及案例分析1. 引言2. 蚁群算法 (ACO) 算法原理2.1 蚂蚁觅食行为2.2 算法步骤2.3 数学公式3. 蚁群算法的优势与局限性3.1 优势3.2 局限性4. 案例分析4.1 案例1: 旅行商…...

安卓动态设置Unity图形API
命令行方式 Unity图像api设置为自动,安卓动态设置Vulkan、OpenGLES Unity设置 安卓设置 创建自定义活动并将其设置为应用程序入口点。 在自定义活动中,覆盖字符串UnityPlayerActivity。updateunitycommandlineararguments (String cmdLine)方法。 在该方法中,将cmdLine…...