Linux awk流编辑器

news2024/12/25 12:34:15

awk流编辑器

工作原理
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

命令格式

awk 选项 '模式或条件 {操作}' 文件 1 文件 2 …
awk -f 脚本文件 文件 1 文件 2 …

awk常见的内建变量(可直接用)如下所示

FS:列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)。
$0:当前处理的行的整行内容。
$n:当前处理行的第n个字段(第n列)。
FILENAME:被处理的文件名。
RS:行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是'\n'

awk如何分隔列?(面试题)

  1. -F 指定分隔符
  2. 修改FS内建变量


awk命令示例

按行输出文本

awk '{print}' testfile2                 #输出所有内容
awk '{print $0}' testfile2              #输出所有内容

显示行内容区间

awk 'NR==1,NR==3{print}' testfile2        #输出第 1~3 行内容
awk '(NR>=1)&&(NR<=3){print}' testfile2   #输出第 1~3 行内容    && 和
awk 'NR==1||NR==3{print}' testfile2       #输出第1行、第3行内容 || 或
awk '(NR>=4)&&(NR<=6)||NR==10{print $0}' testfile2 #输出4-6 10行内容

  显示奇偶行

awk '(NR%2)==1{print}' testfile2        #输出所有奇数行的内容
awk '(NR%2)==0{print}' testfile2        #输出所有偶数行的内容

sed -n 'p;n' testfile #sed实现奇偶行输出 依靠输出、换行

 通过字符串选择行内容

awk '/^root/{print}' /etc/passwd        #输出以 root 开头的行

awk '/nologin$/{print}' /etc/passwd     #输出以 nologin 结尾的行

 BEGIN END的使用   (统计行数)

awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd        

统计以/bin/bash 结尾的行数,等同于 grep -c "/bin/bash$" /etc/passwd

BEGIN先执行BEGIN模式中指定的动作
awk再处理指定的文本
END最后执行,END{}语句块中,往往会放入打印结果等语句

先begin指定x=0 再匹配文本/bin/bash,匹配到就执行x++。最后end输出x的值
awk 'BEGIN {x=0};/nologin$/{x++; print x,$0};END {print x}' /etc/passwd
      
每行输出当前x值(行号) 在输出当前行文本($0)  最后输出统计的总行数 

按内容输出文本 $

单条件判断

由于/etc/passwd文件用:分隔符,需要先指定分隔符-F ":"  ,或是更改内建变量FS=":"

若需要操作的文件用空格等分隔,无需更改,直接$1 $2 $3位置变量输出即可

awk -F ":" '{print $3}' /etc/passwd         #输出每行中(以空格或制表位分隔)的第3个字段

awk -F ":" '{print $1,$3}' /etc/passwd        #输出每行中的第1、3个字段

awk -F ":" '$3<5{print $1,$3}' /etc/passwd    #输出第3个字段的值小于5的第1、3个字段内容

awk -F ":" '!($3<200){print}' /etc/passwd     #输出第3个字段的值不小于200的行

awk 'BEGIN {FS=":"};{if($3>=1000){print $1}}' /etc/passwd 
#若不想在 判断条件{执行语句} ,想写在 {} 内 写法为   {判断条件 {执行语句} }
#先处理完BEGIN的内容吧分隔符改为:,再判断第三个字段>=1000满足就输出 
#与上一条差不多意思,更麻烦的写法

 多条件判断

awk -F ":" '($7!="/bin/bash")&&($7!="/sbin/nologin"){print}' /etc/passwd    
#输出第7个字段既不为/bin/bash,也不为/sbin/nologin的所有行

 三元运算符作为判断条件

awk -F ":" '{max=($3>=$4)?$3:$4;{print $1,max}}' /etc/passwd        
#($3>$4)?$3:$4;三元运算符,如果第3个字段的值大于等于第4个字段的值,
#则把第3个字段的值赋给max,否则第4个字段的值赋给max

NR输出行号

awk -F ":" '{print NR,$0}' /etc/passwd        
#输出每行内容和行号,每处理完一条记录,NR值加1

根据字段包含内容筛选输出

awk -F ":" '$1~"o"{print NR,$0}' /etc/passwd        
#输出第一个字段包含o的行的内容和行号

awk -F ":" '$7~"/bash"{print $1}' /etc/passwd    
#输出以冒号分隔且第7个字段中包含/bash的行的第1个字段

awk -F ":" '$7!~"/bash"{print $1}' /etc/passwd    
#输出以冒号分隔且第7个字段中不包含/bash的行的第1个字段

awk -F ":" '$NF~"/bash"{print $0}' /etc/passwd    
#输出以冒号分隔且最后一个字段中包含/bash的行

awk -F ":" '($1~"root")&&(NF==7){print $1,$2}' /etc/passwd    
#输出第1个字段中包含root且有7个字段的行的第1、2个字段
ps -elf | awk '$2~"Z" {print $0}'
#显示系统僵尸进程
ps -elf | awk '$2~"R" {print $0}'
#显示系统运行进程

ps -aux | awk '$8~"Z" {print $0}'
#显示系统僵尸进程
ps -aux | awk '$8~"R" {print $0}'
#显示系统运行进程

 

通过管道、双引号调用 Shell 命令

NR输出行数

echo $PATH | awk 'BEGIN{RS=":"};END{print NR}'
# | 将echo输出交给awk处理 统计以冒号分隔的文本段落数

统计 | wc -l

awk -F: '/bash$/{print}' /etc/passwd | wc -l   #写在外面
awk -F: '/bash$/{print | "wc -l"}' /etc/passwd #写在里面 麻烦但是更快(缓存读取)
#调用 wc -l 命令统计使用 bash 的用户个数,等同于 grep -c "bash$" /etc/passwd

查看内存百分比

free -m | awk '/Mem:/ {print int($3/($3+$4)*100)"%"}'
#free -m输出交给awk,查找Mem行,输出  $3使用内存/($3使用内存+$4空闲内存)

查看CPU空闲率、使用率

top -b -n 1 | grep Cpu | awk -F ',' '{print $4}' | awk '{print $1}'
#查看当前CPU空闲率,(-b -n 1 表示只需要1次的输出结果) 
top -b -n 1 | grep Cpu | awk -F ',' '{print $4}' | awk '{print 100-$1}'
#查看当前CPU使用率

top输出所有信息
grep找到cpu行  %Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
awk以,分隔cpu行信息,选取第四段   100.0 id 
再次awk,选取第一段 100

注意,当cpu 空闲 id字段 不为100时,前面会有一个空格,会对以空格分隔的awk语句造成影响。

所以上方的命令先用  作为分隔符awk选取一次,再awk以 空格 为分隔符再选取一次。

%Cpu(s):  0.0 us,  0.7 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

 查看磁盘使用率

df | awk '$NF=="/"{print $5}' #使用值
#筛选最后一个字段($NF) 为 / (根目录)的行 选取第五个字段(可用值)
df | awk '$NF=="/"{print 100-$5"%"}' #空闲值
df | awk '$NF=="/"{print $5}' | awk -F% '{print 100-$1"%"}' #空闲值(严谨写法 脱掉%运算后再加上)

显示上次重启的日期和时间

date -d "$(awk -F "." '{print $1}' /proc/uptime) second ago" +"%F %H:%M:%S" 

    2023-05-15 22:33:57

显示上次系统重启时间,等同于uptime
second ago为显示多少秒前的时间
+"%F %H:%M:%S"等同于+"%Y-%m-%d %H:%M:%S"的时间格式

/proc/uptime 第一列输出的是,系统启动到现在的时间(以秒为单位)
第二列输出的是,系统空闲的时间(以秒为单位)
date -d "$(cat /proc/uptime | awk -F. '{print $1}') second ago" +"%Y-%m-%d %H:%M:%S"

    2023-05-15 22:33:57 #cat 通过 | 传输给awk处理 从缓存中读,比上方命令更高效

1.  cat /proc/uptime                          → 3237.81 25848.28
2.  cat /proc/uptime | awk -F. '{print $1}'   → 3237
3.  → date -d "3272 second ago" +"%Y-%m-%d %H:%M:%S"
uptime
    23:35:35 up  1:01,  1 user,  load average: 0.00, 0.01, 0.05

调用w命令,并用来统计在线用户数

awk 'BEGIN {n=0 ; while ("w" | getline) n++ ; {print n-2}}' 

n=0,w | getline获取行 n++,输出n-2

 w获取的前两行是不需要的,因此n-2

调用 hostname,并输出当前的主机名

hostname直接可以获取结果,因此getline直接$0就完事了

awk 'BEGIN {"hostname" | getline ; {print $0}}'
    xue

调用seq获得奇偶行

seq 10 生成1-10的数字

seq 10 | awk '{getline; print $0}'      #获取偶数行
seq 10 | awk '{print $0; getline}'      #获取基数行

当getline左右无重定向符“<”或“|”时,awk首先读取到了第一行,就是1,然后getline,就得到了1下面的第二行,就是2,因为getline之后,awk会改变对应的NF(字段),NR(行号),FNR(每个文件的行号)和$0等内部变量,所以此时的$0的值就不再是1,而是2了,然后将它打印出来。
当getline左右有重定向符“<”或“|”时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。

FNR:单个文件内的行号。awk当前读取的记录数,其变量值小于等于NR(比如当读取第二个文件时,FNR是从0开始重新计数,而NR不会)。

NR:多个文件总读取的行号。
NR==FNR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文件

 输出分隔符OFS

echo "A B C D" | awk '{print $1 $2 $3 $4;}'
    ABCD

echo "A B C D" | awk '{print $1","$2","$3","$4}'
    A,B,C,D #原始写法 手动","分隔

echo "A B C D" | awk '{OFS="|";print $0;$1=$1;print $0}'
    A B C D
    A|B|C|D #OFS指定输出分隔符
echo "A B C D" | awk 'BEGIN {OFS="|"}; {$1=$1;print $0}'
    A|B|C|D #OFS指定输出分隔符 BEGIN写法

$1=$1 是用来激活$0的重新赋值,也就是说 字段$1...和字段数NF的改变会促使awk重新计算$0的值,通常是在改变OFS后而需要输出$0时这样做

 awk 定义输出数组

awk 'BEGIN{a[0]=10;a[1]=20; print a[1]}'
    20
awk 'BEGIN{a[0]=10;a[1]=20; print a[0]}'
    10
awk 'BEGIN{a["abc"]=10;a["xyz"]=20;print a["abc"]}'
    10
awk 'BEGIN{a["abc"]=10;a["xyz"]=20;print a["xyz"]}'
    20
awk 'BEGIN{a["abc"]="aabbcc";a["xyz"]="xxyyzz";print a["xyz"]}'
    xxyyzz
awk 'BEGIN{a[0]=10;a[1]=20;a[2]=30;for(i in a){print i,a[i]}}'
    0 10
    1 20
    2 30

PS1:BEGIN中的命令只执行一次
PS2:awk数组的下标除了可以使用数字,也可以使用字符串,字符串需要使用双引号

awk 数组 统计文本出现次数、行数

cat test.txt
    aaa
    aaa
    bbb
    ccc
    aaa
    bbb
    aaa

统计所有行数

awk每读一行,a数组下标1位置的值自增1

awk '{a[1]++}END{for(i in a){print a[i]}}' test.txt
    7

统计文本出现次数 数组方式

把得到的行内容 $1(aaa、bbb、ccc)作为a数组的下标地址,

awk每读一行,a数组的下标 $1(aaa、bbb、ccc)自加1 ,从而实现分类统计

awk '{a[$1]++}END{for(i in a){print a[i],i}}' test.txt | sort -r
    4 aaa
    2 bbb
    1 ccc

 统计文本出现次数 sort | uniq方式

cat test.txt | sort #先使用sort排序
    aaa
    aaa
    aaa
    aaa
    bbb
    bbb
    ccc
cat test.txt | sort | uniq -c #在使用uniq合并-c统计重复次数
      4 aaa
      2 bbb
      1 ccc

awk 数组 统计网址出现次数

vim b.txt
    http://www.baidu.com/index.html
    http://www.google.com/index.html
    http://www.baidu.com/set.html
    http://www.baidu.com/get.html
    http://www.google.com/index.html
    http://www.yahoo.com.cn/put.html

将域名提取出来,统计域名重复次数,按次数降序排列,输出统计结果

方法1 sort | uniq方式

awk -F/ '{print $3}' b.txt #提取域名
awk -F/ '{print $3}' b.txt | sort -n #排序域名 
awk -F/ '{print $3}' b.txt | sort -n | uniq -c #重复内容合并 统计次数

      3 www.baidu.com
      2 www.google.com
      1 www.yahoo.com.cn

方法2 awk 数组方式

awk -F/ '{a[$3]++}END{for(i in a){print a[i],i}}' b.txt | sort -r

    3 www.baidu.com
    2 www.google.com
    1 www.yahoo.com.cn


awk命令应用

编写监控脚本,如果查到有人访问本机密码输错超过三次报警

 方法1 sort | uniq方式

cat /var/log/secure | awk '/Failed password/{print $11}' | sort -n | uniq -c

方法2 awk 数组方式

awk '/Failed/{ip[$11]++}END{for(i in ip){print i","ip[i]}}' /var/log/secure

        将其编写为shell脚本

#!/bin/bash
x=`awk '/Failed/{ip[$11]++}END{for(i in ip){print i","ip[i]}}' /var/log/secure`
#/Failed/找到包含Failed行 找到$11[ip字段]作为数组下标++1
for i in $x 
do
    p=${i%,*}        #变量p内容是ip
    s=${i#*,}        #变量s内容是输错密码的次数
    [ $s -gt 3 ] && echo "报警! $p访问本机失败了$s次,赶紧处理" 
done

使用awk 统计 httpd 访问日志中每个客户端IP的出现次数?

awk '{ip[$1]++}END{for(i in ip){print ip[i],i}' /var/log/httpd/access_log | sort -r

定义数组,数组名称为ip,数字的下标为日志文件的第1列(也就是客户端的IР地址),++的目的在于对客户端进行统计计数,客户端IP出现一次计数器就加1。END中的指令在读取完文件后执行,通过循环将所有统计信息输出,for循环遍历的是数组名ip的下标。

使用 awk 去重

arr=(1 2 3 4 5 5 4 3 2 1)
awk -v RS=' ' '!a[$1]++' <<< ${arr[@]}
#-v 设置变量
#<<< 表示将后面的内容作为前面命令的标准输入
#awk '1' 就是 awk '1{print}' ,允许打印读入的行内容,例:echo 123 | awk '1'
#awk '0' 就是 awk '0{print}' ,不允许打印读入的行内容,例:echo 123 | awk '0'
#var++ 的形式:先读取 var 变量值,再对 var 值 +1

 awk 处理第一行时:先读取 a[$1] 值再自增,a[$1] 即 a[1] 值为空(即0),即为 awk '!0',即为 awk '1',即为 awk'1{print}'
 awk 处理第二行时:先读取 a[$1] 值再自增,a[$1] 即 a[1] 值为 1,即为 awk '!1',即为 awk '0',即为 awk '0{print}'

cpu负载,内存容量,硬盘空间,网卡流量,安装的软件包数量,账户数量,当前登录的账户数量,进程数量,输错密码的主机

uptime,free -m,df -h,ifconfig ens33,rpm -qa|wc -l,/etc/passwd,who,ps aux, /var/log/secure

显示系统相关参数

ip=`ifconfig ens33 | awk '/inet /{print $2}'`
echo "本地IP地址是:"$ip
cpu=`uptime | awk '{print $NF}'`
#awk中NF为当前行的列数,$NF是最后一列
echo "本机CPU最近15分钟的负载是:"$cpu
net_in=`ifconfig ens33 | awk '/RX p/{print $5}'`
echo "入站网卡流量为:"$net_in
net_out=`ifconfig ens33 | awk '/TX p/{print $5}'`
echo "出站网卡流量为:"$net_out
mem=`free -m | awk '/^Mem/{print $4)'`
echo "内存剩余容量为:"$mem
disk=`df -h | awk '/sda1/{print $4}'`
echo "根分区剩余容量为:"$disk
user=`cat /etc/passwd |wc -l`
echo "本地账户数量为:"$user
login=`who | wc -l`
echo "当前登陆计算机的账户数量为:"$login
process=`ps aux | wc -l`
echo "当前计算机启动的进程数量为:"$process
soft=`rpm -qa | wc -l`
echo "当前计算机已安装的软件数量为:"$soft

过滤密码失败的命令

awk '/Failed password/{ip[$11]++}END{for(i in ip){print i","ip[i],i}}' /var/log/secure | awk '$1>3{print $2}'
awk '/Invalid user/{print $10}' /var/log/secure | awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' | awk '$1>3{print $2}'

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

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

相关文章

pix2pix

Image-to-Image Translation Using Conditional Adversarial Networks 1&#xff1a; pix2pix也是CGAN的一种&#xff0c;pix2pix可以学习输入到输出的映射&#xff0c;同时也学习了损害函数去训练这个映射。这是一个大一统的方法去实现从标签合成图像&#xff0c;从边界图重建…

【FMC139】多通道采集--基于 VITA57.1 标准的4 路500MSPS/1GSPS 14 位AD 采集子卡模块(AD9680/HMC7044)

板卡概述 FMC139 是一款基于VITA57.1 标准规范的JESD204B 接口FMC 子卡模块&#xff0c;该模块可以实现4 路14-bit、500MSPS/1GSPSADC采集功能。该板卡ADC 器件采用ADI 公司的AD9680 芯片,全功率-3dB 模拟输入带宽可达2GHz。该ADC 与FPGA 的主机接口通过8通道的高速串行GTX 收…

AutoSAR PNC和ComM

文章目录 PNC和ComMPNC管理NM PDU结构及PNC信息位置如何理解节点关联PNCPNC状态管理 ComM 通道状态管理 PNC和ComM PNC 和 ComM层的Channel不是一个概念&#xff0c;ComM的Channel对应具体的物理总线数。 在ComM模块中&#xff0c;一个Channel可以对应一个PNC&#xff0c;也可…

AIGC产业研究报告2023——语言生成篇

易观&#xff1a;今年以来&#xff0c;随着人工智能技术不断实现突破迭代&#xff0c;生成式AI的话题多次成为热门&#xff0c;而人工智能内容生成&#xff08;AIGC&#xff09;的产业发展、市场反应与相应监管要求也受到了广泛关注。为了更好地探寻其在各行业落地应用的可行性…

java字类与继承

文章目录 一、Java子类与父类二、Java子类的继承性三、Java子类与对象四、Java成员变量的隐藏和方法重写五、Java super关键字六、Java final关键字七、Java对象的上转型对象八、Java继承与多态九、Java abstract类和abstract方法总结 一、Java子类与父类 继承就是一种由已有的…

电脑无法安装软件?不用慌,这样做可以快速解决!

案例&#xff1a;为什么我的电脑不能下载软件&#xff1f; 【在学习的过程中&#xff0c;需要下载一些软件工具。按照老师给的软件步骤&#xff0c;电脑还是无法安装软件&#xff0c;有小伙伴知道怎么回事吗&#xff1f;】 在使用电脑的过程中&#xff0c;很多小伙伴都会遇到…

【C++】unordered_map和unordered_set的模拟实现

一、改造HashTable 实现了哈希表&#xff08;开散列&#xff09;&#xff0c;再将其封装为unordered_map和unordered_set。 HashTable的改造与RBTree的改造大致相同&#xff1a; 改造节点 template<class T> struct HashNode {//std::pair<K, V> _kv;//HashNod…

【AI思维空间】ChatGPT纵横编程世界,点亮智慧火花 | 京东云技术团队

作者&#xff1a;京东零售 王英杰 概述 该文档记录云交易开发小伙伴儿们在开发过程中的实际应用案例&#xff0c;记录典型案例&#xff0c;以解决开发过程中的实际问题为主&#xff0c;涵盖设计方案、编码、测试、集成、部署等等。 目的&#xff1a;贡献最佳实践&#xff0c;…

案例6:Java社区志愿者服务系统设计与实现开题报告

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

全面升级:知否AI问答场景导航功能震撼登场

今日&#xff0c;知否AI问答平台推出全新的场景功能&#xff0c;为用户提供更全面、高效的智能问答服务&#xff0c;再也不用担心找不到适合自己的场景入口了。 此次升级涵盖了50多个场景&#xff0c;包括论文助手、公司文案、营销文案、多语言翻译、行政公文、科研课题、招投…

bat脚本、dos命令

bat脚本 bat脚本就是DOS批处理脚本&#xff0c;就是将一系列DOS命令按照一定顺序排列而形成的集合&#xff0c;运行在windows命令行环境上。这个文件的每一行都是一条DOS命令 在命令提示下键入批处理文件的名称&#xff0c;或者双击该批处理文件&#xff0c;系统就会调用Cmd.…

服务器信息收集

#Version&#xff1a;1.2 #Modify Date&#xff1a;2013-05-21 #说明&#xff1a; #该脚本可以获取计算机名,域名,IP地址,操作系统版本,CPU名称单颗CPU内核数量*CPU个数,内存大小(GB),单块磁盘大小,计算机序列号,制造商,计算机型号 #该脚本先将计算机信息输出到txt文件中&…

浅谈Gradle构建工具

一、序言 常见的项目构建工具有Ant、Maven、Gradle&#xff0c;以往项目常见采用Maven进构建&#xff0c;但随着技术的发展&#xff0c;越来越多的项目采用Gradle进行构建&#xff0c;例如 Spring-boot。Gradle站在了Ant和Maven构建工具的肩膀上&#xff0c;使用强大的表达式语…

千万不要乱操作了!医院机房这么做真高级

各类中心数据机房广泛分布于银行、库房、交通、电信、医院、教育等行业。系统故障和人为操作不当可能导致各种业务中断或数据丢失&#xff0c;进而影响企业业务的停滞和运行。 医院管理3大难题和挑战 01.缺乏预警、告警机制 医院在使用自动化监控系统之前&#xff0c;主要靠人…

springboot足球赛事安排球队管理系统

系统主要有球队赛程安排&#xff0c;包括比赛数据&#xff0c;球员信息&#xff0c;球员实时数据&#xff0c;球队纪念品售卖 Spring Boot 是 Spring 家族中的一个全新的框架&#xff0c;它用来简化Spring应用程序的创建和开发过程。也可以说 Spring Boot 能简化我们之前采用SS…

09——path的使用

一、path 是 svg 中最强大的图形 用于定义一个 路径所有命令均允许小写字母。大写 表示绝对定位&#xff0c;小写 表示 相对定位 &#xff08;相对于上一个结束的坐标&#xff09;d 属性中包含所有路径的点&#xff0c;可根据命令缩写 自由组合 命令 名称 …

Windows 11 反转鼠标和触摸板滚动方向

如果在使用 Windows 10 设备时不喜欢鼠标或触摸板的「下滚上移&#xff0c;上滚下移」方式&#xff0c;可以通过调整「Windows 设备」或更改注册表 2 种方式来反转滚动方向。 下面就为大家介绍详细步骤。 Windows 11反转触摸板滚动方向 要通过调整「Windows 设置」反转触摸板…

企业为什么需要一套CRM系统进行销售管理

随着市场竞争的日益激烈和消费者的日益挑剔&#xff0c;企业要想在市场中取得优势地位&#xff0c;就需要通过有效的销售管理来提高销售业绩。而CRM系统作为企业实现销售管理的最佳选择&#xff0c;越来越受到企业的重视和关注。 一、CRM系统的优势 1. 提高销售流程管理效率 C…

车载AUTOSAR和OSEK关系及网络管理的异同(NM)

AUTOSAR和OSEK关系及网络管理比较 AUTOSAR和OSEK关系及网络管理比较 AUTOSAR和OSEK关系及网络管理比较AUTOSAR与OSEK的关系AUTOSARAUTOSAR架构和标准的目标是&#xff1a;AUTOSAR架构的主要特点是&#xff1a;AUTOSAR标准有四个核心内容&#xff1a; OSEK其特点主要有以下几个方…

基于SSM+JSP的高校学生健康档案管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…