当前位置: 首页 > news >正文

Linux初学(十二)AWK进阶

一、AWK

1.1 简介

  • AWK是Linux中重要的文本处理工具
  • Linux三剑客只一
  • 处理的对象可以是一个具体的文件,也可以是一个命令的执行结果
  • AWK按行读取文件,将每一行视为一条记录

案例一:获取系统中每个用户的uid

方法一:cat /etc/passwd | awk -F ":" '{print $3}'

方法二:awk -F ":" '{print $3}' /etc/passwd

案例二:显示root用户的家目录

方法一:head -n1 /etc/passwd | awk -F ":" '{print %6}'

方法二:grep "^root\>" /etc/passwd | awk -F ":" '{print $6}'

1.2 awk的基本格式

awk [选项] '模式{动作}' 文件

  • 选项:
    • -F "分隔符" : 用什么字符将这行内容分成一段一段的
  • 模式:在处理一行之前先要判断的条件
    • 如果条件满足,就处理这行,否则,直接开始读取下一行
    • 如果不设置条件,则处理文件中的每一行
  • 动作:模式中的条件在满足的情况下,对这行内容执行的操作

awk用来表示每一段的方法

  • $1:第一个字段
  • $2:第二个字段
  • $3:第三个字段
  • $NF:表示每行的最后一个字段
  • $0:表示一整行

案例

1、获取每行的最后一个字段

awk -F "/" '{print $NF}‘ /etc/passwd’


2、显示系统中的全部用户名

awk -F ":" '{print $1}' /etc/passwd


3、显示系统中的前三个用户
awk -F  ":" 'NR<=3{print $1}' /etc/passwd

  • NR【Number of Record】:awk的内置变量,表示正在读取的是第几条记录
    • 当读取第一行内容的时候,NR的值是1;当读取第二行的时候,NR的值是2,依次类推
    • 每读取一行内容,NR的值自动加1

1.3 概念

  • 记录:文件中的一行就是一条记录
    • awk在工作的时候,每次会读取一条记录
    • 每读取一条,NR值加1
  • 字段:一行被分隔的多个部分,一个部分就是一个字段
  • 分隔符:指定用什么来将这个记录分成一段一段的

案例

1、仅显示/etc/passwd中的第三行内容

awk -F ":" 'NR==3 {print $0}' /etc/passwd


2、输出系统中每个用户的姓名以及对应的shell类型

awk -F ":" '{print $1,"shell is ",$NF}' /etc/passwd

注意:输出多个字段的情况下,多个字段中间用逗号分隔

1.4 变量

  • FS:表示字段分隔符(默认是任何空格)
  • NF:表示字段数(当前这个记录中字段的个数)
  • NR:表示记录数,在执行过程中对应于当前的行号
  • OFS:表示输出域分隔符
  • ORS:表示输出记录分隔符(默认值是一个换行符)
  • RS:表示记录分隔符(默认是一个换行符)

案例:

1、输出3-5行的用户姓名、和shell类型

方法一:awk -F ":" 'NR>=3&&NR<=5{print $1,$NF}' /etc/passwd

方法二:head -n5 /etc/passwd | tail -n3 | awk -F ":" '{print $1,$NF}'

2、获取ens33的IP地址

方法一:ip addr show ens33 | grep "inet\>" | awk -F " " '{print $2}' | awk -F "/" '{print $1}'

方法二:ip addr show ens33 | awk -F " " 'NR==3{print $2}' | awk -F "/" '{print $1}'

方法三:ip addr show ens33 | awk -F "[/ ]+" 'NR==3{print $3}'

3、统计/tmp/a.txt 中每行有多少个单词

awk -F " " '{print "第",NR,"行有",NF,"单词"}' /tmp/a.txt

1.5 awk结合正则表达式

1)在awk中进行搜索操作

  • 格式:awk -F ":" '/过滤的内容/{print xxx}'

案例:显示tom用户的uid

awk -F ":" '/tom '{print $3}' /etc/passwd

2)awk和^的结合使用

案例:/etc/passwd匹配以root为开头的行,打印整条记录

awk -F ":" '/^root\>/{print $0}' /etc/passwd

3)awk和$的结合使用

案例:/etc/passwd匹配以bash为结尾的行,打印整条记录

awk -F ":" '/bash$/{print $0}' passwd

4)awk和.的结合使用

案例:/etc/passwd匹配以r和t之间有两个字符的行,打印整条记录

awk -F ":" '/r..t/{print $0}' /etc/passwd

5)awk和.*的结合使用

案例:/etc/passwd匹配以r和t之间有任意字符的行,打印整条记录

awk -F ":" '/r.*t/{print $0}' /etc/passwd

6)指定多个分隔符

  • 指定单个分割符:-F "xxx"
  • 指定多个分隔符:-F [xxx],分隔符中如果有空格和其他符号同时作为分隔符,那么[ ]中空格必须在最后
  • 指定多个连续的符号作为分隔符,可以用+

awk -F "[/-]+" '{print $1}'  1.txt

1.6 awk练习

1)在passwd文件中,找用户名是以a为开头的行

awk -F ":" '$1~/^a/{print $0}'  /etc/passwd

2)倒数第二列$(NF-1)这一列查找匹配以tom结尾的行

awk -F ":" '$(NF-1)~/tom$/{print NR,$0}' /etc/passwd

3)$3这一列查找匹配以a或b或s开头的行

方法一:awk -F ":" '$3~/^(a|b|s)/{print $0}'  /etc/passwd

方法二:awk -F ":" '$3~/^[abs]/{print $0}'  /etc/passwd

4)取ens33网卡ip地址

方法一:纯grep方法

ip addr show ens33 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'

方法二:grep结合awk
ip addr show ens33 | grep "inet\>" | awk -F " " '{print $2}' | awk -F "/" '{print $1}'

方法三:纯awk
ip addr show ens33 | awk -F "[/ ]+" 'NR==3{print $3}'

ip addr show ens33 | awk -F "[/ ]+"  '/inet\>/{print $3}'

ip addr show ens33 | awk -F "[/ ]+"  '$NF~/ens33$/{print $3}'

5)找出/etc/passwd的第六个字段(以:为分隔符)以/sbin开头的行

awk -F ":" '$6~/^\/sbin/{print $0}' /etc/passwd

6)找出/etc/passwd的第六个字段(以:为分隔符)不是以/sbin开头的行

awk -F ":" '$6!~/^\/sbin/{print $0}' /etc/passwd

1.7 awk的表达式

序号符号含义举例
1<小于【处理数字】NR<7
2>大于【处理数字】NR>5
3==等于【处理数字】NR==3
4!=不等【处理数字】NR!=6
5>=大于等于【处理数字】NR>=3
6<=小于等于【处理数字】NR<=4
~用于进行正则表达式匹配【处理字符串】$3~/^abc/
8!~用于进行正则表达式不匹配【处理字符串】$3!~/^abc/

1.8 awk模块

awk的模块包含两个

BEGIN:

END:

BEGIN模块

  • 用于定义一个动作,用{ }表示要执行的动作
  • 这个动作要在读取文件之前执行
  • 这里的动作大多要用于定义变量,包括内置变量,自定义变量

END模块

  • 用于定义一个动作,用{ }表示要执行的动作
  • 这个动作是awk将文件中的内容读取完成之后,而且处理完成以后,END模块才会执行
  • 这里的动作通常用于输出一个结果

格式:

  • awk 'BEGIN{}END{}' fileName
  • 工作过程
    • step 1:执行BEGIN中的操作,通常是定义变量:内置变量、自定义变量
    • step 2:BEGIN中的操作执行完成以后,读取一行fileName文件中的内容,然后执行一次中间的动作;然后重复读取fileName中的每行内容,并重复执行中间的动作
    • step 3:fileName中的内容全部读取完成后,执行END中的操作,通常是用于输出

案例:

1、输出每个用户的用户名、id、shell

方法一:awk -F ":" '{print $1,$3,$NF}' /etc/passwd

方法二:awk 'BEGIN{FS=":"}{print $1,$3,$NF}' /etc/passwd

2、统计 /etc/passwd 中有多少行

awk 'BEGIN{num=0}{num+=1}END{print num}' /etc/passwd

3、统计a.txt中有多少个单词

方法一:awk 'BEGIN{sum=0}{sum+=NF}END{print sum}' a.txt
方法二:

                cat 1.txt | tr ' ' '\n' >2.txt
                awk '{num+=1}END{print num}' 2.txt

                tr ' ' '\n' 作用每个空格字符替换为换行符


4、统计系统中有多少用户的shell类型是/bin/bash

awk 'BEGIN{FS=":"; sum=0}$NF~/\/bin\/bash$/{sum+=1}END{print sum}' /etc/passwd

5、输出前三个用户的用户名、id、shell
awk 'BEGIN{FS=":"}NR<=3{print $1,$3,$NF}' /etc/passwd

注意:通常每种都有默认值

  • FS默认值就是空格
  • OFS默认值就是空格
  • ORS默认是换行符
  • RS默认是换行符

案例:

1、在读取文件前输出一个提示信息
awk 'BEGIN{print "start to awk process..."}{print $0}' /etc/passwd

2、在读取文件前和后分别输出一个提示信息
awk 'BEGIN{print "start to awk process..."}{print $0}END{print "over....."}'  /etc/passwd

3、统计文件中的空白行的行数

方法一:grep "^$" a.txt | wc -l

方法二:awk 'BEGIN{num=0}/^$/{num+=1}END{print num}' a.txt

方法三:awk '/^$/{num+=1}END{print num}' a.txt


4、统计文件中以#开头的行的行数

awk 'BEGIN{num=0}/^#/{num+=1}END{print num}' a.txt

awk '/^#/{num+=1}END{print num}' a.txt

5、统计系统中uid大于大于499的用户个数

awk 'BEGIN{num=0}$3>499{num+=1}END{print num}' /etc/passwd

6、计算1~100的累加和
seq 100 | awk 'BEGIN{sum=0}{sum+=$0}END{print sum}'


7、将用户信息格式中的密码占位符和描述信息去除掉

awk 'BEGIN{FS=":";OFS=":"}{print $1,$3,$4,$6,$7}' /etc/passwd

1.9 awk 数组

变量:一个变量只能存储一个值

  • name=tom
  • age=20

数组:一组相同数据类型的集合

  • userList = ['tom','jerry','bajie','wukong']
  • 三个概念
    • 数组名
    • 数组的索引
    • 数组的索引对应的值

定义数组:

  • 数组名[索引]=值

案例:

  • 数组名:userList

定义数组元素和值:

  • userList[1]=tom
  • userList[2]=jerry
  • userList[3=bok
  • userList[4]=bajie
  • userInfo["name"]="tom"
  • userInfo["age"]=33
  • userInfo["addr"]="hebei"

获取数组中的值

  • userList[2]
  • userInfo["name"]

数组的索引

  • 数字、数字索引的变号是从0开始
  • 字母
  • 字符串

案例

[root@ansible tmp]# awk 
'BEGIN{stu[0]="tom";stu[1]="jerry";stu[2]="jack";print stu[1]}'
jerry[root@ansible tmp]# awk 
'BEGIN{stu[0]="tom";stu[1]="jerry";stu[2]="jack";print stu[2]}'
jack[root@ansible tmp]# awk 
'BEGIN{stu["name"]="tom";stu["age"]="20";stu["tel"]="1308888123";print stu["age"]}'
20[root@ansible tmp]# awk 
'BEGIN{stu["name"]="tom";stu["age"]="20";stu["tel"]="1301111";print stu["tel"]}'
1301111

1.10 数组的循环遍历

  • 格式:for(变量 in 数组名)
  • 变量中存储的是数组的索引
[root@test ~]# awk
'BEGIN{userList[0]="tom";userList[1]="jerry";userList[2]="jack"}
END{for(var in userList) print "第",var1+1,"个用户是",userList[var]}' mypwd
第 1 个用户是 tom
第 2 个用户是 jerry
第 3 个用户是 jack[root@test ~]# awk
'BEGIN{info["name"]="tom";info["age"]="25";info["addr"]="beijing"}
END(for var in info) print var,"is",info[var]}' mypwd
age is 25
addr is beijing
name is tom[root@test ~]# awk
'BEGIN{info["www.baidu.com"]=5;info["ftp.baidu.com"]=11;info["mail.baidu.com"]=
9;info[cdn.baidu.com"]=23}END(for(var in info) print var,"is",info[var]}' mypwd
ftp.baidu.com is 11
cdn.baidu.com is 23
www.baidu.com is 5
mail.baidu.com is 9
案例:分析httpd的日志文件,对各个域名的访问次数进行排序
http://www.baidu.com/index.html
http://mail.baidu.com/index.html
http://ftp.baidu.com/index.html
http://ftp.baidu.com/index.html
http://www.baidu.com/index.html
http://ftp.baidu.com/index.html
http://mail.baidu.com/index.html
http://mail.baidu.com/index.html
http://www.baidu.com/index.html
http://ftp.baidu.com/index.html
http://www.baidu.com/index.html
http://www.baidu.com/index.html
http://ftp.baidu.com/index.html
http://ftp.baidu.com/index.html
获取每个域名的出去次数
[root@ansible ~]# awk -F "/+" '{list[$2]++}END{for(site in list)print site,
list[site]}' web.log
ftp.baidu.com 6
www.baidu.com 5
mail.baidu.com 3
基于域名的出现次数进行排序
方法一:
[root@ansible ~]# awk -F "/+" '{list[$2]++}END{for(site in list)print
site,list[site]}' web.log | sort -n -k2 -r
ftp.baidu.com 6
www.baidu.com 5
mail.baidu.com 3方法二:
[root@ensible ~]# awk -F "/+" '{print $2}' web.log | sort | uniq -c | sort -k1 -n
3 mail.baidu.com
5 www.baidu.com
6 ftp.baidu.com
案例:分析/var/log/secure日志,显示用户从哪些IP登录系统,并对ip出现次数进行排序
[root@test log]# awk -F "(from|port)" /Accepted password/{ip[$2]+=1}END{
for(var in ip)print var,ip[var]}' log1.txt | sort -t " " -k2 -r -n
192.168.31.100 36
192.168.1.123 24
192.168.1.5 2
192.168.1.100 2
192.168.1.8 1
案例:统计每天产生多少条日志信息
awk '{day[$1,$2]++}END{for(var in day)print var,day[var]}' log1.txt
案例:统计9月13日的每小时产生多少条日志
awk -F "[: ]+" '$2==13(date[$3]++}END{for(var in date)print var,date[var]}' log1.txt
案例:统计9月13日的12点到14点期间,一共产生多少条日志
awk -F "[: ]+" '$2==13&&$3>=12&&$3<=14{sum+=1}END{print sum}' log1.txt
案例:统计9月13日的12点到14点期间,用户登录过多少次
awk -F "[: ]+" '/Accepted password/&&$2==13&&$3>=12&&$3<=14{sum++}END{print sum}' log1.txt
案例:统计9月13日的12点到14点期间,用户通过哪些IP登录过,分别显示登录过多少次
awk -F "[: ]+" '$0~/Accepted password/&&$2==13&&$3>=12&&$3<=14{ip[$3]++}END{for
(var in ip)print var,ip[var]}' log1.txt
192.168.1.123 2
192.168.1.100 5
192.168.1.8 3

sort命令

  • 作用:排序
  • 选项
    • -n:基于数字进行排序
    • -r:逆序排序
    • -k#:根据那个字段进行排序

相关文章:

Linux初学(十二)AWK进阶

一、AWK 1.1 简介 AWK是Linux中重要的文本处理工具Linux三剑客只一处理的对象可以是一个具体的文件&#xff0c;也可以是一个命令的执行结果AWK按行读取文件&#xff0c;将每一行视为一条记录 案例一&#xff1a;获取系统中每个用户的uid 方法一&#xff1a;cat /etc/passwd |…...

文字识别 Optical Character Recognition,OCR CTC STN

文字识别 Optical Character Recognition,OCR 自然场景文本检测识别技术综述 将图片上的文字内容,智能识别成为可编辑的文本。 场景文字识别(Scene Text Recognition,STR) OCR(Optical Character Recognition, 光学字符识别)传统上指对输入扫描文档图像进行分析处理,识…...

四、MySQL读写分离之MyCAT

一、读写分离概述 1、什么是读写分离&#xff1a; 读写分离&#xff1a;就是将读写操作分发到不同的服务器&#xff0c;读操作分发到对应的服务器 &#xff08;slave&#xff09;&#xff0c;写操作分发到对应的服务器&#xff08;master&#xff09; ① M-S (主从) 架构下&…...

通讯录项目实现

引言&#xff1a;通过顺序表的逻辑实现通讯录。这里就不讲关于顺序表的函数了。如果有不明白的可以看我写的顺序表的博客。 目录 顺序表与通讯录的比较 各源文件文件大榄 Contact.c中通讯录相关函数的定义 初始化和销毁通讯录 添加联系人&#xff1a; 删除联系人&#xf…...

xss相关知识点与绕过思路总结

前言 对xss的绕过进行了系统的学习与实践后&#xff0c;重新审视一下xss&#xff0c;对他的绕过进行一个总结。 &#xff08;当然我也是个小白&#xff0c;这些也是我当时瞎鸡儿乱搞绕过了几个xss自己做的小总结&#xff09; 可能有点丑陋&#xff0c;献丑了。 好博客推荐 …...

深入解析语言模型:原理、实战与评估

引言 随着人工智能的飞速发展&#xff0c;语言模型作为自然语言处理&#xff08;NLP&#xff09;的核心技术之一&#xff0c;日益受到业界的广泛关注。本文旨在深入探讨语言模型的原理、实战应用以及评估方法&#xff0c;帮助读者更好地理解和应用这一技术。 一、语言模型原理…...

Elasticsearch 的索引优化常规项

优化常规项 https://blog.csdn.net/bairo007/article/details/132019575 1、按实际情况适当调整主分片的数量 如果主分片数量太少&#xff0c;会导致每个分片中的数据量过大&#xff0c;而且无法利用集群中所有节点的计算资源。如果主分片数量太多&#xff0c;会导致索引过度…...

【JavaParser笔记01】JavaParser解析Java源代码中的类信息(javadoc注释、类​​​​​​​名称)

这篇文章,主要介绍如何使用JavaParser解析Java源代码中的类信息(javadoc注释、类名称)。 目录 一、JavaParser依赖库 1.1、引入依赖 1.2、获取类注释信息...

Stable Diffusion扩散模型【详解】小白也能看懂!!

文章目录 1、Diffusion的整体过程2、加噪过程2.1 加噪的具体细节2.2 加噪过程的公式推导 3、去噪过程3.1 图像概率分布 4、损失函数5、 伪代码过程 此文涉及公式推导&#xff0c;需要参考这篇文章&#xff1a; Stable Diffusion扩散模型推导公式的基础知识 1、Diffusion的整体…...

关于rabbitmq的prefetch机制

消息预取机制&#xff08;Prefetch Mechanism&#xff09;是RabbitMQ中用于控制消息传递给消费者的一种机制。它定义了在一个信道上&#xff0c;消费者允许的最大未确认的消息数量。一旦未确认的消息数量达到了设置的预取值&#xff0c;RabbitMQ就会停止向该消费者发送更多消息…...

机器学习介绍

机器学习是人工智能&#xff08;AI&#xff09;的一个分支&#xff0c;它使计算机系统能够从数据中学习并改进它们的性能。机器学习的核心在于开发算法&#xff0c;这些算法可以从大量数据中识别模式和特征&#xff0c;并用这些信息来做出预测或决策&#xff0c;而无需进行明确…...

OpenCV4.9开发之Window开发环境搭建

1.打开OpenCV所在github地址 2.点击opencv仓库,进入仓库详情,点击右下方的OpenCV 4.9.0进入下载页面 3.点击opencv-4.9.0-windows.exe下载 开始下载中... 下载完成 下载完成后,双击运行解压,默认解压路径,修改为c:/...

DDD 中的实体和值对象有什么区别?

在DDD中&#xff0c;实体 Entity 和值对象 Value Object 是两个基本的概念&#xff0c;它们之间有一些重要的区别。 唯一性&#xff1a;实体是唯一的&#xff0c;每个实体都有一个唯一的标识符&#xff0c;即使它的属性在一段时间内发生了变化&#xff0c;它仍然是这个实体。与…...

算法-最值问题

#include<iostream> using namespace std; int main() {int a[7];//上午上课时间int b[7];//下午上课时间int c[7];//一天总上课时间for (int i 0; i < 7; i) {cin >> a[i] >> b[i];c[i] a[i] b[i];}int max c[0];//max记录最长时间int index -1;//索…...

Go 性能压测工具之wrk介绍与使用

在项目正式上线之前&#xff0c;我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug&#xff1b;压力测试&#xff08;压测&#xff09;是确保系统在高负载情况下仍能稳定运行的重要步骤。通过模拟高并发场景&#xff0c;可以评估系统的性能瓶颈、可靠…...

数学思想论(有目录)

数学思想是数学发展过程中的重要指导原则,它涉及对数学概念、方法和理论的理解和认识,以及如何利用这些工具来解决实际问题。数学思想的形成和演进是随着数学的发展而逐渐深化的,它体现了人类对数学本质和应用的不断探索和思考。 一些主要的数学思想包括: 函数与方程思想…...

C++的并发世界(五)——线程状态切换

0.线程状态 初始化&#xff1a;该线程正在被创建&#xff1b; 就绪&#xff1a;该线程在列表中就绪&#xff0c;等待CPU调度&#xff1b; 运行&#xff1a;该线程正在运行&#xff1b; 阻塞&#xff1a;该线程被阻塞挂机&#xff0c;Blocked状态包括&#xff1a;pend&#xff…...

C语言——指针

地址是由物理的电线上产生的&#xff0c;能够标识唯一一个内存单元。在C语言中&#xff0c;地址也叫做指针。 在32位机器中&#xff0c;有32根地址线。地址是由32个0/1组成的二进制序列&#xff0c;也就是用4个字节来存储地址。 在64位机器中&#xff0c;有64根地址线。地址是…...

手搓二分查找

第一种&#xff1a; 该种方法是若a[mid]目标数&#xff0c;则让r一直等于mid&#xff0c;让l往右移动&#xff0c;一直移动到rl&#xff0c;这时候跳出循环&#xff0c;在循环外判断 但是不能写成让lmid&#xff0c;让r往左移动&#xff0c;比如a[2]key&#xff0c;这时&#x…...

pycharm调试(步过(Step Over)、单步执行(Step Into)、步入(Step Into)、步出(Step Out))

pycharm调试 pycharm调试 pycharm调试为什么要学会调试&#xff1f;1. 步过 (Step Over)2. 单步执行 (Step Into)3. 步入&#xff08;Step Into&#xff09;4. 步出&#xff08;Step Out&#xff09; 为什么要学会调试&#xff1f; 调试可以帮助初学者更深入地理解编程基础&am…...

Linux是什么,该如何学习

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Linux的起源与发展 2、Linux在现代计算机领域…...

C++ | Leetcode C++题解之第7题整数反转

题目&#xff1a; 题解&#xff1a; class Solution { public:int reverse(int x) {int rev 0;while (x ! 0) {if (rev < INT_MIN / 10 || rev > INT_MAX / 10) {return 0;}int digit x % 10;x / 10;rev rev * 10 digit;}return rev;} };...

Linux------一篇博客了解Linux最常用的指令

&#x1f388;个人主页&#xff1a;靓仔很忙i &#x1f4bb;B 站主页&#xff1a;&#x1f449;B站&#x1f448; &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;Linux &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#…...

vscode安装通义灵码

作为vscode的插件&#xff0c;直接使用 通义灵码-灵动指间&#xff0c;快码加编&#xff0c;你的智能编码助手 通义灵码&#xff0c;是一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研…...

RIP协议(路由信息协议)

一、RIP协议概述 RIP协议&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;是一种基于距离矢量的内部网关协议&#xff0c;即根据跳数来度量路由开销&#xff0c;进行路由选择。 相比于其它路由协议&#xff08;如OSPF、ISIS等&#xff09;&#…...

SpringBoot根据配置类动态加载不同环境下的自定义配置

dev环境配置 Profile({"dev","test"}) PropertySource("classpath:dev.properties") public class DevConfigLoader { }Profile("prod") PropertySource("classpath:prod.properties") public class ProdConfigLoader { }P…...

什么?穷哥们没钱RLHF?跟我一起DPO吧,丐版一样用

本次DPO训练采用TRL的方式来进行训练 Huggingface TRL是一个基于peft的库&#xff0c;它可以让RL步骤变得更灵活、简单&#xff0c;你可以使用这个算法finetune一个模型去生成积极的评论、减少毒性等等。 本次进行DPO的模型是一个500M的GPT-2&#xff0c;目的是训练快&#x…...

【Leetcode笔记】102.二叉树的层序遍历

目录 知识点Leetcode代码&#xff1a;ACM模式代码&#xff1a; 知识点 vector、queue容器的操作 对vector<int> vec;做插入元素操作&#xff1a;vec.push_back(x)。对queue<TreeNode*> que;做插入元素操作&#xff1a;que.push(root);。队列有四个常用的操作&…...

进程的状态

目录 1.操作系统的进程状态 2.Linux系统的进程状态 特殊的进程状态 进程的查看 1.操作系统的进程状态 a.新建&#xff1a;就是新建一个进程 b.运行&#xff1a;PCB结构体在运行队列中排队 c.阻塞&#xff1a;PCB结构体在等待队列中&#xff0c;等待非CPU资源就续 d:挂起…...

spring-boot集成websocket

引入Maven依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId><version>跟随spingboot版本</version> </dependency>后端代码 /*** 开启WebSocket支持*…...

网站和微信公众号建设/优化设计五年级下册数学答案

数据湖技术圈作者刘凯廷 百草味-信息数据中心负责人 朱齐天 百草味-信息数据中心-数据部负责人1百草味公司及业务简介 百草味是以休闲食品研发、加工、生产、贸易、仓储、物流为主体&#xff0c;集互联网商务经营模式、新零售为一体的全渠道品牌和综合型品牌。百草味以“让…...

wordpress商业主题分享/武汉关键词seo排名

主要内容 线程概念 创建线程的两个方法 实现runnable()接口 重写Thread类中方法 两种方法的区别创建线程与方法调用区别 停止线程的两个方法 interrupt()强制打断 引入变量boolean flag 控制Thread类常用方法 sleep() interrupt() join() yield() setPriority(int newPriority)…...

单页网站如何优化/保定百度推广优化排名

这篇文章主要介绍了如何用phpExcel将Excel导入到Mysql数据库 &#xff0c;有一定的参考价值&#xff0c;感兴趣的朋友可以看看。1、http://phpexcel.codeplex.com/下载phpExcel2、代码如下&#xff1a;<?require_once PHPExcel.php;require_once PHPExcel/IOFactory.php;re…...

网站策划设计招聘/小程序开发框架

作者&#xff1a;朱金灿 来源&#xff1a;https://blog.csdn.net/clever101 将一个Windows程序从32位转为64位程序&#xff0c;出现用户回调期间遇到未经处理的异常的错误&#xff0c;如下图&#xff1a; 经过调试发现是调用GetWindowLong返回为空指针&#xff0c;经过搜索&am…...

网站开发专业公司有哪些/营销策划运营培训机构

一、数据库连接池 在程序启动时建立足够的数据库连接放置在内存中&#xff08;List&#xff09;&#xff0c;这些连接组成连接池由程序动态的对池中的连接进行申请&#xff0c;使用&#xff0c;释放。 优势&#xff1a;资源重用&#xff1b;由于数据库连接得以重用&#xff0c;…...

logo设计说明模板/重庆网站seo诊断

题目名称&#xff1a;蝈蝈式的记分 内容描述&#xff1a; 蝈蝈小朋友刚刚学会了 0-9 这十个数字 , 也跟爸爸妈妈来参加百度每周进行的羽毛球活动。但是他还没有球拍高&#xff0c;于是大人们叫他记录分数。聪明的蝈蝈发现只要记录连续得分的情况就可以了&#xff0c;比如用…...