【RHCE】awk文本处理

目录

基本介绍

命令格式

awk基本使用

命令行读取程序脚本

数据字段变量

脚本中使用多个命令

文件中读取程序

处理数据前运行脚本(BEGIN)

处理数据后运行脚本(END)

awk高级用法

变量

内建变量

自定义变量

数组

定义数组变量

遍历数组变量

删除数组变量

使用模式

正则表达式

匹配操作符

数学表达式

结构化命令

if语句

while语句

do-while语句

for语句

内建函数

数学函数

字符串函数

时间函数

自定义函数


基本介绍

AWK是一种强大的文本处理工具,常用于在 Linux/Unix 系统中对文本文件进行模式扫描和处理。它非常适合处理结构化文本数据(如日志文件、CSV 文件等),并支持按行处理、字段提取、条件过滤和计算等操作。awk编程语言中,你可以做下面的事情:

定义变量来保存数据;
使用算术和字符串操作符来处理数据;
使用结构化编程概念(比如 if-then 语句和循环)来为数据处理增加处理逻辑;
通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化报告。

命令格式

awk 程序的基本格式如下:
awk options program file
常用选项描述
-F
指定行中划分数据字段的字段分隔符
-f
从指定的文件中读取程序
-v
定义 awk 程序中的一个变量及其默认值
-mf
指定要处理的数据文件中的最大字段数
-mr
指定数据文件中的最大数据行数
命令行选项提供了一个简单的途径来定制 awk 程序中的功能。我们会在探索 awk 时进一步了解这些选项。
awk 的强大之处在于程序脚本。可以写脚本来读取文本行的数据,然后处理并显示数据,创建任何类型的输出报告。

awk基本使用

命令行读取程序脚本

awk 程序脚本用一对花括号来定义。你必须将脚本命令放到两个花括号( {} )中。如果你错误地使用了圆括号来包含awk 脚本,就会得到一条类似于下面的错误提示。
[root@localhost ~]# awk '{print "Hello World!"}'
1
Hello World!
1
Hello World!

print命令会将文本打印到标准输出,若没有指定文本文件会从标准输入中接受数据。 

数据字段变量

awk的主要特性之一是其处理文本文件中数据的能力。它会自动给一行中的每个数据元素分配
一个变量。默认情况下, awk会将如下变量分配给它在文本行中发现的数据字段: 
$0
代表整个文本行;
$1
代表文本行中的第 1 个数据字段;
$2
代表文本行中的第 2 个数据字段;
$n
代表文本行中的第 n 个数据字段。

以下为从data2.txt文件中获取每行的第一个字段和第二个字段。

[root@localhost ~]# cat data2.txt
One line of test text.
Two lines of test text.
Three lines of test text.[root@localhost ~]# awk '{print $1,$2}' data2.txt 
One line
Two lines
Three lines

此外也可以用-F选项指定字段分割符

[root@localhost ~]# awk -F : '{print $1}' /etc/passwd | head -3
root
bin
daemon

脚本中使用多个命令

在脚本中运行多个命令,若在同一行中,只需在两条命令中加 ; 即可。

[root@localhost ~]# awk '{print "hello";print "world"}'hello
world

 若在不同行中,则无需 ;。

[root@localhost ~]# awk '{
> print "hello"
> print "world"
> }'hello
world

文件中读取程序

awk使用 -f 参数从指定文件中读取程序

[root@localhost ~]# cat script2.awk 
{print $1,"'s home is",$6
}[root@localhost ~]# awk -F : -f script2.awk /etc/passwd | head -3
root 's home is /root
bin 's home is /bin
daemon 's home is /sbin

处理数据前运行脚本(BEGIN)

awk 还允许指定程序脚本何时运行。默认情况下, awk 会从输入中读取一行文本,然后针对该行的数据执行程序脚本。有时可能需要在处理数据前运行脚本,比如为报告创建标题。
BEGIN关键字就是用来做这个的。它会强制awk 在读取数据前执行 BEGIN 关键字后指定的程序脚本。
[root@localhost ~]# cat data3.txt 
Line 1
Line 2
Line 3
[root@localhost ~]# awk 'BEGIN {print "data3.txt:"}{print $0}' data3.txt 
data3.txt:
Line 1
Line 2
Line 3

处理数据后运行脚本(END)

BEGIN 关键字类似, END 关键字允许你指定一个程序脚本, awk 会在读完数据后执行它。
可以用END来做页脚、报告总结等。
[root@localhost ~]# awk 'BEGIN {print "data3.txt:"}{print $0}END{print "end of file"}' data3.txt 
data3.txt:
Line 1
Line 2
Line 3
end of file

awk高级用法

变量

所有编程语言共有的一个重要特性是使用变量来存取值。 awk 编程语言支持两种不同类型的变量:
  1. 内建变量
  2. 自定义变量

awk有一些自带的内建变量,用于存放处理数据文件中的数据字段和记录的信息等。

内建变量

  1. 字段和记录分隔符变量
变量描述
FIELDWIDTHS
由空格分隔的一列数字,定义了每个数据字段确切宽度
FS
输入字段分隔符
RS
输入记录分隔符
OFS
输出字段分隔符
ORS
输出记录分隔符

 在BEGIN中用FS指定输入字段分割符,OFS指定输出字段分隔符,若不指定则都为空格。

[root@localhost ~]# cat data1.txt 
data11,data12,data13,data14,data15
data21,data22,data23,data24,data25
data31,data32,data33,data34,data35[root@localhost ~]# awk 'BEGIN{FS=","}{print $1,$2,$3}' data1.txt 
data11 data12 data13
data21 data22 data23
data31 data32 data33[root@localhost ~]# awk 'BEGIN{FS=",";OFS="-"}{print $1,$2,$3}' data1.txt 
data11-data12-data13
data21-data22-data23
data31-data32-data33

 FIELDWIDTHS可以精确的指定每个字段的长度,这种方法不适用与变长的字段。

[root@localhost ~]# awk 'BEGIN{FIELDWIDTHS="3 5 2 5"}{print $1,$2,$3,$4}' data1.txt 
dat a11,d at a12,d
dat a21,d at a22,d
dat a31,d at a32,d

 在awk中,可以根据情况指定RS输入记录分割符,以应对特殊情况。

[root@localhost ~]# cat data4.txt 
Riley Mullen
123 Main Street
Chicago, IL 60601
(312)555-1234Frank Williams
456 Oak Street
Indianapolis, IN 46201
(317)555-9876Haley Snell
4231 Elm Street
Detroit, MI 48201
(313)555-4938[root@localhost ~]# awk 'BEGIN{FS="\n";RS=""}{print $1,$4}' data4.txt 
Riley Mullen (312)555-1234
Frank Williams (317)555-9876
Haley Snell (313)555-4938

  1. 数据变量
除了字段和记录分隔符变量外, awk 还提供了其他一些内建变量来帮助你了解数据发生了什么变化,并提取shell 环境的信息。下表列出了 awk 中的其他内建变量。
变量
描述
ARGC
当前命令行参数个数
ARGIND
当前文件在 ARGV 中的位置
ARGV
包含命令行参数的数组
CONVFMT
数字的转换格式(参见 printf 语句),默认值为 %.6 g
ENVIRON
当前 shell 环境变量及其值组成的关联数组
ERRNO
当读取或关闭输入文件发生错误时的系统错误号
FILENAME
用作 awk 输入数据的数据文件的文件名
FNR
当前数据文件中的数据行数
IGNORECASE
设成非零值时,忽略 awk 命令中出现的字符串的字符大小写
NF
数据文件中的字段总数
NR
已处理的输入记录数
OFMT
数字的输出格式,默认值为 %.6 g
RLENGTH
match 函数所匹配的子字符串的长度
RSTART
match 函数所匹配的子字符串的起始位置

自定义变量

跟其他典型的编程语言一样, awk 允许你定义自己的变量在程序代码中使用。 awk 自定义变量名可以是任意数目的字母、数字和下划线,但不能以数字开头。重要的是,要记住awk 变量名区分大小写。
[root@localhost ~]# awk 'BEGIN{testing="hello world"}{print testing}'hello world

自定义变量除了可以存字符串,也可以存数值,并进行数值运算

[root@localhost ~]# awk 'BEGIN{a=10
> a=a+15
> }
> {
> print a
> }'25

也可以在命令行上给变量赋值

[root@localhost ~]# cat data1.txt 
data11,data12,data13,data14,data15
data21,data22,data23,data24,data25
data31,data32,data33,data34,data35[root@localhost ~]# awk -F , '{print $n}' n=3 data1.txt 
data13
data23
data33

但这种方法赋值的变量在BEGIN中不生效

[root@localhost ~]# awk -F , 'BEGIN{print n}{print $n}' n=3 data1.txt data13
data23
data33

也可以使用 -v 参数赋值变量,这样声明的变量在BEGIN中也能使用

[root@localhost ~]# awk -F , -v n=3 'BEGIN{print n}{print $n}' data1.txt 
3
data13
data23
data33

数组

为了在单个变量中存储多个值,许多编程语言都提供数组。 awk 编程语言使用关联数组提供数组功能。
关联数组跟数字数组不同之处在于它的索引值可以是任意文本字符串。你不需要用连续的数字来标识数组中的数据元素。相反,关联数组用各种字符串来引用值。每个索引字符串都必须能够唯一地标识出赋给它的数据元素。

定义数组变量

[root@localhost ~]# cat script3.awk 
BEGIN{str["name"] = "xiaoming"str["age"] = 18str["sex"] = "man"	
}
{print str["name"]	
}
[root@localhost ~]# awk -f script3.awk xiaoming

遍历数组变量

在awk中遍历数组,可以使用for in语句

for (var in array)
{
statements
}

 这个for语句会在每次循环时将关联数组array的下一个索引值赋给变量var,然后执行一遍 statements。

[root@localhost ~]# cat script3.awk 
BEGIN{str["name"] = "xiaoming"str["age"] = 18str["sex"] = "man"	
}
{for(s in str){print s,":",str[s]}	
}
[root@localhost ~]# awk -f script3.awk age : 18
sex : man
name : xiaoming

删除数组变量

从关联数组中删除数组索引要用一个特殊的命令。
delete array[index]
删除命令会从数组中删除指定的键值对。
[root@localhost ~]# cat script3.awk 
BEGIN{str["name"] = "xiaoming"str["age"] = 18str["sex"] = "man"	
}
{delete str["age"]for(s in str){print s,":",str[s]}	
}
[root@localhost ~]# awk -f script3.awk sex : man
name : xiaoming

使用模式

awk 程序支持多种类型的匹配模式来过滤数据记录 BEGIN 和END关键字是用来在读取数据流之前或之后执行命令的特殊模式。类似地,你可以创建其他模式在数据流中出现匹配数据时执行一些命令。

正则表达式

可以用基础正则表达式( BRE )或扩展正则表达式( ERE )来选择程序脚本作用在数据流中的哪些行上。在使用正则表达式时,正则表达式必须出现在它要控制的程序脚本的左花括号前。
[root@localhost ~]# cat data5.txt 
Alice 25 Engineer
Bob 30 Doctor
Charlie 22 Student
David 35 Lawyer
Eve 28 Artist[root@localhost ~]# awk '/^C/{print $0}' data5.txt 
Charlie 22 Student

匹配操作符

匹配操作符( matching operator )允许将正则表达式限定在记录中的特定数据字段。匹配操
作符是波浪线( ~ )。可以指定匹配操作符、数据字段变量以及要匹配的正则表达式。(!~)表示取反。
[root@localhost ~]# cat data5.txt 
Alice 25 Engineer
Bob 30 Doctor
Charlie 22 Student
David 35 Lawyer
Eve 28 Artist[root@localhost ~]# awk '$3 ~ /i/{print $0}' data5.txt 
Alice 25 Engineer
Eve 28 Artist[root@localhost ~]# awk '$3 !~ /i/{print $0}' data5.txt 
Bob 30 Doctor
Charlie 22 Student
David 35 Lawyer

数学表达式

除了正则表达式,你也可以在匹配模式中用数学表达式。这个功能在匹配数据字段中的数字值时非常方便。

可以使用常见的数学比较表达式:

x == y
x 等于 y
x <= y
x 小于等于 y
x < y
x 小于 y
x >= y
x 大于等于 y
x > y
x 大于 y
[root@localhost ~]# cat data5.txt 
Alice 25 Engineer
Bob 30 Doctor
Charlie 22 Student
David 35 Lawyer
Eve 28 Artist[root@localhost ~]# awk '$2>=25{print $0}' data5.txt 
Alice 25 Engineer
Bob 30 Doctor
David 35 Lawyer
Eve 28 Artist[root@localhost ~]# awk 'BEGIN{FS=":"}$1=="root"{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash[root@localhost ~]# awk 'BEGIN{FS=":"}$1>="q"{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
sssd:x:997:995:User for sssd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

结构化命令

if语句

[root@localhost ~]# cat data6.txt 
10
5
13
50
34
[root@localhost ~]# awk '{if($1 > 20) print $1}' data6.txt 
50
34
awk if 语句也支持 else 子句,允许在 if 语句条件不成立的情况下执行一条或多条语句。

[root@localhost ~]# cat script4.awk 
{if($1%400==0){print $1 " is Leap Year"}else if($1%4==0 && $1%100!=0)print $1 " is Leap Year"elseprint $1 " not is Leap Year"}
[root@localhost ~]# cat data7.txt 
2014
2020
2017
2019
2024
2026
1900
[root@localhost ~]# awk -f script4.awk data7.txt 
2014 not is Leap Year
2020 is Leap Year
2017 not is Leap Year
2019 not is Leap Year
2024 is Leap Year
2026 not is Leap Year
1900 not is Leap Year

while语句

while 循环允许遍历一组数据,并检查迭代的结束条件。如果在计算中必须使用每条记录中的多个数据值,这个功能能帮得上忙。
[root@localhost ~]# cat data8.txt 
130 120 135
160 113 140
145 170 215
[root@localhost ~]# cat script5.awk 
BEGIN{sum=0
}
{s=0i=1while(i<NF){s+=$ii++}print NR "‘sum: " ssum+=s
}
END{print "sum: " sum	
}
[root@localhost ~]# awk -f script5.awk data8.txt 
1‘sum: 250
2‘sum: 273
3‘sum: 315
sum: 838

 awk编程语言支持在while循环中使用break语句和continue语句,允许你从循环中跳出。

[root@localhost ~]# cat script5.awk 
BEGIN{sum=0
}
{s=0i=1while(i<NF){s+=$ii++if(i==2)break}print NR "‘sum: " ssum+=s
}
END{print "sum: " sum	
}
[root@localhost ~]# awk -f script5.awk data8.txt 
1‘sum: 130
2‘sum: 160
3‘sum: 145
sum: 435

do-while语句

do-while 语句类似于 while 语句,这种格式保证了语句会在条件被求值之前至少执行一次。当需要在求值条件前执行语句时,这个特性非常方便。
[root@localhost ~]# cat data8.txt 
130 120 135
160 113 140
145 170 215
[root@localhost ~]# cat script6.awk 
BEGIN{sum=0
}
{s=0i=1do{s+=$ii++}while(i<NF)print NR "‘sum: " ssum+=s
}
END{print "sum: " sum	
}
[root@localhost ~]# awk -f script6.awk data8.txt 
1‘sum: 250
2‘sum: 273
3‘sum: 315
sum: 838

for语句

for 语句是许多编程语言执行循环的常见方法。 awk 编程语言支持 C 风格的 for 循环。
[root@localhost ~]# cat data8.txt 
130 120 135
160 113 140
145 170 215
[root@localhost ~]# cat script7.awk 
BEGIN{sum=0
}
{s=0for(i=1;i<NF;i++){s+=$i}print NR "‘sum: " ssum+=s
}
END{print "sum: " sum	
}
[root@localhost ~]# awk -f script7.awk data8.txt 
1‘sum: 250
2‘sum: 273
3‘sum: 315
sum: 838

内建函数

awk 编程语言提供了不少内置函数,可进行一些常见的数学、字符串以及时间函数运算。你可以在awk 程序中利用这些函数来减少脚本中的编码工作。

数学函数

函数描述
atan2(x, y)
x/y 的反正切, x y 以弧度为单位
cos(x)
x 的余弦, x 以弧度为单位
exp(x)
x 的指数函数
int(x)
x 的整数部分,取靠近零一侧的值
log(x)
x 的自然对数
rand( )
0 大比 1 小的随机浮点值(不包括0或1)
sin(x)
x 的正弦, x 以弧度为单位
sqrt(x)
x 的平方根
srand(x)
为计算随机数指定一个种子值

字符串函数

函数描述
asort(s [,d])
将数组 s 按数据元素值排序。索引值会被替换成表示新的排序顺序的连续数字。另外, 如果指定了d ,则排序后的数组会存储在数组 d
asorti(s [,d])
将数组 s 按索引值排序。生成的数组会将索引值作为数据元素值,用连续数字索引来表明排序顺序。另外如果指定了d ,排序后的数组会存储在数组d
gensub(r, s, h [, t])
查找变量 $0 或目标字符串 t (如果提供了的话)来匹配正则表达式r 。如果 h 是一个以 g或G 开头的字符串,就用 s 替换掉匹配的文本。如果 h 是一个数字,它表示要替换掉第h处r 匹配的地方
gsub(r, s [,t])
查找变量 $0 或目标字符串 t (如果提供了的话)来匹配正则表达式r 。如果找到了,就
全部替换成字符串 s
index(s, t)
返回字符串 t 在字符串 s 中的索引值,如果没找到的话返回 0
length([s])
返回字符串 s 的长度;如果没有指定的话,返回 $0 的长度
match(s, r [,a])
返回字符串 s 中正则表达式 r 出现位置的索引。如果指定了数组a ,它会存储 s 中匹配正则表达式的那部分
split(s, a [,r])
s FS 字符或正则表达式 r (如果指定了的话)分开放到数组a 中。返回字段的总数
sprintf(format,variables)
用提供的 format variables 返回一个类似于 printf 输出的字符串
sub(r, s [,t])
在变量 $0 或目标字符串 t 中查找正则表达式 r 的匹配。如果找到了,就用字符串s 替换
掉第一处匹配
substr(s, i [,n])
返回 s 中从索引值 i 开始的 n 个字符组成的子字符串。如果未提供n ,则返回 s 剩下的部
tolower(s)
s 中的所有字符转换成小写
toupper(s)
s 中的所有字符转换成大写

[root@localhost ~]# awk '{print length($1)}'
hello
5
red
3[root@localhost ~]# cat script8.awk 
BEGIN{a[0] = 45a[1] = 12a[2] = 34a[3] = 5asort(a)for(i in a){print a[i]}	
}
[root@localhost ~]# awk -f script8.awk 
5
12
34
45//split可以很方便的将字段放进数组中[root@localhost ~]# cat script9.awk 
BEGIN{FS=":"
}
{split($0,var)print var[1],var[NF]
}
[root@localhost ~]# head -3 /etc/passwd | awk -f script9.awk 
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin

时间函数

函数
描述
mktime(datespec)
将一个按 YYYY MM DD HH MM SS [DST] 格式指定的日期转换成时间戳值
strftime(format[,timestamp])
将当前时间的时间戳或 timestamp (如果提供了的话)转化格式化日期(采用shell函数date() 的格式)
systime( )
返回当前时间的时间戳

 下面是在awk程序中使用时间函数的例子。

[root@localhost ~]# cat script10.awk 
{date=systime()print strftime("%Y %T",date)	
}
[root@localhost ~]# awk -f script10.awk 2025 21:23:542025 21:23:562025 21:23:57

自定义函数

自定义函数基本格式

function name([variables])
{
statements
return value
}

 在定义函数时,它必须出现在所有代码块之前(包括BEGIN代码块)。

[root@localhost ~]# cat script12.awk 
function leap(year){if(year%400==0){print year " is Leap Year"}else if(year%4==0 && year%100!=0)print year " is Leap Year"elseprint year " not is Leap Year"}
BEGIN{for(i=2025;i<=2050;i++){leap(i)}
}[root@localhost ~]# awk -f script12.awk 
2025 not is Leap Year
2026 not is Leap Year
2027 not is Leap Year
2028 is Leap Year
2029 not is Leap Year
2030 not is Leap Year
2031 not is Leap Year
2032 is Leap Year
2033 not is Leap Year
2034 not is Leap Year
2035 not is Leap Year
2036 is Leap Year
2037 not is Leap Year
2038 not is Leap Year
2039 not is Leap Year
2040 is Leap Year
2041 not is Leap Year
2042 not is Leap Year
2043 not is Leap Year
2044 is Leap Year
2045 not is Leap Year
2046 not is Leap Year
2047 not is Leap Year
2048 is Leap Year
2049 not is Leap Year
2050 not is Leap Year

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

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

相关文章

Vue3 核心特性解析:Suspense 与 Teleport 原理深度剖析

Vue3 核心特性解析&#xff1a;Suspense 与 Teleport 原理深度剖析 一、Teleport&#xff1a;突破组件层级的时空传送 1.1 实现原理图解 #mermaid-svg-75dTmiektg1XNS13 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…

工业界处理 Atomic 操作的优化策略

在产业界&#xff0c;处理 atomic 操作 时&#xff0c;通常会根据具体情境选择不同的策略&#xff0c;主要取决于以下三个因素&#xff1a; 内存一致性需求&#xff1a;是否需要确保 所有线程&#xff08;threads&#xff09; 都能看到最新的变量值。性能需求&#xff1a;是否…

Python功能完美的宝库——内置的强大“武器库”builtins

builtins模块包含了Python大量的内置对象&#xff08;函数、异常和类型等&#xff09;&#xff0c;她是Python的内置武器库&#xff0c;堪称功能完美的宝库。 笔记模板由python脚本于2025-03-19 08:16:27创建&#xff0c;本篇笔记适合喜欢探究python的coder翻阅。 【学习的细节…

三分钟掌握视频分辨率修改 | 在 Rust 中优雅地使用 FFmpeg

前言 在视频处理领域&#xff0c;调整视频分辨率是一个绕不过去的需求。比如&#xff0c;你可能需要将一段视频适配到手机、平板或大屏电视上&#xff0c;或者为了节省存储空间和网络带宽而压缩视频尺寸。然而&#xff0c;传统的FFmpeg命令行工具虽然功能强大&#xff0c;但复…

PyTorch 深度学习实战(17):Asynchronous Advantage Actor-Critic (A3C) 算法与并行训练

在上一篇文章中&#xff0c;我们深入探讨了 Soft Actor-Critic (SAC) 算法及其在平衡探索与利用方面的优势。本文将介绍强化学习领域的重要里程碑——Asynchronous Advantage Actor-Critic (A3C) 算法&#xff0c;并展示如何利用 PyTorch 实现并行化训练来加速学习过程。 一、A…

【深度学习】多目标融合算法(五):定制门控网络CGC(Customized Gate Control)

目录 一、引言 二、CGC&#xff08;Customized Gate Control&#xff0c;定制门控网络&#xff09; 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一、引言 上一…

在线pdf处理网站合集

1、PDF24 Tools&#xff1a;https://tools.pdf24.org/zh/ 2、PDF派&#xff1a;https://www.pdfpai.com/ 3、ALL TO ALL&#xff1a;https://www.alltoall.net/ 4、CleverPDF&#xff1a;https://www.cleverpdf.com/cn 5、Doc Small&#xff1a;https://docsmall.com/ 6、Aconv…

网络编程-实现客户端通信

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <sys/select.h>#define MAX_CLIENTS 2 // 最大客户端连接数 #define BUFFER_SI…

力扣100二刷——图论、回溯

第二次刷题不在idea写代码&#xff0c;而是直接在leetcode网站上写&#xff0c;“逼”自己掌握常用的函数。 标志掌握程度解释办法⭐Fully 完全掌握看到题目就有思路&#xff0c;编程也很流利⭐⭐Basically 基本掌握需要稍作思考&#xff0c;或者看到提示方法后能解答⭐⭐⭐Sl…

【大模型实战篇】多模态推理模型Skywork-R1V

1. 背景介绍 近期昆仑万维开源的Skywork R1V模型&#xff0c;是基于InternViT-6B-448px-V2_5以及deepseek-ai/DeepSeek-R1-Distill-Qwen-32B 通过强化学习得到。当然语言模型也可以切换成QwQ-32B。因此该模型最终的参数量大小为38B。 该模型具备多模态推理能力&#xf…

识别并脱敏上传到deepseek/chatgpt的文本文件中的护照信息

本文将介绍一种简单高效的方法解决用户在上传文件到DeepSeek、ChatGPT&#xff0c;文心一言&#xff0c;AI等大语言模型平台过程中的护照号识别和脱敏问题。 DeepSeek、ChatGPT&#xff0c;Qwen&#xff0c;Claude等AI平台工具快速的被接受和使用&#xff0c;用户每天上传的文…

数据驱动进化:AI Agent如何重构手机交互范式?

如果说AIGC拉开了内容生成的序幕&#xff0c;那么AI Agent则标志着AI从“工具”向“助手”的跨越式进化。它不再是简单的问答机器&#xff0c;而是一个能够感知环境、规划任务并自主执行的智能体&#xff0c;更像是虚拟世界中的“全能员工”。 正如行业所热议的&#xff1a;“大…

【AI News | 20250319】每日AI进展

AI Repos 1、XianyuAutoAgent 实现了 24 小时自动化值守的 AI 智能客服系统&#xff0c;支持多专家协同决策、智能议价和上下文感知对话&#xff0c;让我们店铺管理更轻松。主要功能&#xff1a; 智能对话引擎&#xff0c;支持上下文感知和专家路由阶梯降价策略&#xff0c;自…

nginx中间件部署

中间件部署流程 ~高级权限账户安装必要的插件 -> 普通权限账户安装所需要的服务 -> 高级权限账户开启并设置开机自启所安装的服务 -> iptables放行所需要的服务 普通权限账户安装NGINX中间件 1、拥有高级权限的账户安装必要的插件 sudo yum install -y gcc-c make…

C语言自定义类型【结构体】详解,【结构体内存怎么计算】 详解 【热门考点】:结构体内存对齐

引言 详细讲解什么是结构体&#xff0c;结构体的运用&#xff0c; 详细介绍了结构体在内存中占几个字节的计算。 【热门考点】&#xff1a;结构体内存对齐 介绍了&#xff1a;结构体传参 一、什么是结构体&#xff1f; 结构是⼀些值的集合&#xff0c;这些值称为成员变量。结构…

前端应用更新通知机制全解析:构建智能化版本更新策略

引言&#xff1a;数字时代的更新挑战 在持续交付的现代软件开发模式下&#xff0c;前端应用平均每周产生2-3次版本迭代。但据Google研究报告显示&#xff0c;38%的用户在遇到功能异常时仍在使用过期版本的应用。如何优雅地实现版本更新通知&#xff0c;已成为提升用户体验的关…

Apache DolphinScheduler:一个可视化大数据工作流调度平台

Apache DolphinScheduler&#xff08;海豚调度&#xff09;是一个分布式易扩展的可视化工作流任务调度开源系统&#xff0c;适用于企业级场景&#xff0c;提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。 Apache DolphinScheduler 旨在解决复杂的大数据…

[蓝桥杯 2023 省 B] 飞机降落

[蓝桥杯 2023 省 B] 飞机降落 题目描述 N N N 架飞机准备降落到某个只有一条跑道的机场。其中第 i i i 架飞机在 T i T_{i} Ti​ 时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 D i D_{i} Di​ 个单位时间&#xff0c;即它最早可以于 T i T_{i} Ti​ 时刻…

使用Trae 生成的React版的贪吃蛇

使用Trae 生成的React版的贪吃蛇 首先你想用这个贪吃蛇&#xff0c;你需要先安装Trae Trae 官方地址 他有两种模式 chat builder 我使用的是builder模式,虽然是Alpha.还是可以用。 接下来就是按着需求傻瓜式的操作生成代码 他生成的代码不完全正确&#xff0c;比如没有引入…

AI大模型:(一)1.大模型的发展与局限

说起AI大模型不得不说下机器学习的发展史&#xff0c;机器学习包括传统机器学习、深度学习&#xff0c;而大模型&#xff08;Large Models&#xff09;属于机器学习中的深度学习&#xff08;Deep Learning&#xff09;领域&#xff0c;具体来说&#xff0c;它们通常基于神经网络…