首页 > 系统相关 >使用shell进行简单分析增量更新时间的方法

使用shell进行简单分析增量更新时间的方法

时间:2022-11-01 14:14:58浏览次数:37  
标签:shell deploy 补丁 更新 echo awk 增量 txt

使用shell进行简单分析增量更新时间的方法


思路

产品里面更新增量时耗时较久, 
想着能够简单分析下哪些补丁更新时间久
哪些相同前缀的补丁更新的时间累积较久.
本来想通过全shell的方式进行处理
但是有一部不太会用 就用上了excel的数据列处理
为了防止自己忘记, 这里简单总结一下. 

获取所有的补丁更新记录

第一步获取更新日志- 注意本方法建议仅进行一次完整更新的时间分析.
我们的日志一般是会进行拆分和打包.
分析的方法为
第一步解压缩
第二步按照时间进行文件排序
cat test1 > all.txt
cat test2 >> all.txt
就可以归集到一个文件中来
然后可以查看文件内容,如果前面大部分都是应用升级, 没必要分析时间
可以使用 vim 打开all.txt 然后的命令模式下输入 /databaseschemas 的方式
过滤到具体哪一行开始更新数据库. 
然后输入 :set nu 查看具体的函数
tail -n  +行数 all.txt >all2.txt
清理不需要分析的部分日志. 
保留必须要分析的日志文件.

原始文件第一次分析

  • 获取单独增量的个体的更新时间
log=/log/oscartime2
ip=10.110.139.181
code=xxxx
# 初始化记录文件
echo "">/deploy/Patchinstalltime.txt
# 获取每个补丁的更新时间 单位为秒数, 精确到秒, 不包括毫秒数
grep -E "开始安装补丁|补丁安装完成" $log |grep -Ev "$ip|$code|请自行启动服务"  | awk '{print $6 " " $2}' |cut -c 8- |awk '{print $2}' |cut -c -8 |awk -F ":" '{print $1*3600+$2*60+$3}' >/deploy/timesource.txt
cat /deploy/timesource.txt | awk 'NR%2{p=$1;next}{print ($1-p)}' >/deploy/time.txt
# 按照更新顺序获取更新过的补丁列表
grep "开始安装补丁" $log  |awk '{print $6}' |cut -c 8- >/deploy/code.txt
# 备份文件
checkstat=`grep -E "开始安装补丁|补丁安装完成" $log |grep -Ev "$ip|$code" | head -n 1 |grep 补丁安装完成 |wc -l`
if [ $checkstat -eq 1 ]; then
echo "文件的开始不是补丁开始安装而是已经安装完成,所以需要删除第一行数据"
sed "1d" -i /deploy/timesource.txt
fi
cat /deploy/timesource.txt | awk 'NR%2{p=$1;next}{print ($1-p)}' >/deploy/time.txt
scp /deploy/time.txt /deploy/time_back.txt                      
scp /deploy/code.txt /deploy/code_back.txt
# 获取补丁数量,这数字为补丁数量乘以2 应用一次 数据库一次
j=`cat /deploy/time.txt |wc -l`
echo "本次待分析的补丁共计: "$j "个"
i=1
# 获取每个补丁的更新时间.
while [ $i -le $j ]                             
do
        #echo $i                                                 
        t1=$(sed -n "1p" /deploy/code_back.txt) 
        t2=$(sed -n "1p" /deploy/time_back.txt) 
        t="$t1的更新时间为:           $t2"      
        echo $t >>/deploy/Patchinstalltime.txt  
        sed "1d" -i /deploy/time_back.txt               
        sed "1d" -i /deploy/code_back.txt               
        i=$[$i+1]
done
cat /deploy/Patchinstalltime.txt |sort -k2hr >/deploy/PatchinstalltimeOrder.txt
echo "分析补丁更新时间的原始文件为:"  "/deploy/Patchinstalltime.txt"
echo "分析补丁更新时间的原始文件为经过排序为:"  "/deploy/PatchinstalltimeOrder.txt"

使用excel进行分析

可以将第一步处理好的文件使用excel打开

注意分隔符需要使用 : 
然后建议多复制几行 时间, 然后拆分补丁名称
选中补丁名称列, 然后打开数据 工具栏
进行分栏 处理
可以使用 2 进行分栏 指代 2022年中第一个2字
然后前面的就是补丁模块信息
再将HB 置换成 null 就是补丁模块名称了. 

然后再将结果转储到一个文件就可以进行下一步的处理. 

使用awk第三次分析

 awk '{sum[$1]+=$2}END{for(c in sum){print c,sum[c]}}' raw2 >raw3.txt
 cat raw3.txt |sort -k1h >finaltime.txt

直接使用shell脚本进行模块更新时间统计

j=`cat /deploy/PatchinstalltimeOrder.txt |wc -l`
echo "本次待分析的补丁共计: "$j "个"
i=1
scp /deploy/PatchinstalltimeOrder.txt /deploy/Patchmoduletest.txt
echo " " > /deploy/patchmoduletime.txt
sed -i  "s/HB202/#/" /deploy/Patchmoduletest.txt
sed -i  "s/202/#/" /deploy/Patchmoduletest.txt
while [ $i -le $j ]                             
do
        #echo $i      
        patchmodule=$(cat Patchmoduletest.txt |awk  'BEGIN{FS="#"}NR==1{print $1}')
        patchtime=$(cat Patchmoduletest.txt |awk  'BEGIN{FS=":"}NR==1{print $2}')
        echo $patchmodule  $patchtime >> /deploy/patchmoduletime.txt
        sed "1d" -i /deploy/Patchmoduletest.txt              
        i=$[$i+1]
done 

awk '{sum[$1]+=$2}END{for(c in sum){print c,sum[c]}}' /deploy/patchmoduletime.txt |sort -k2hr  >/deploy/patchmodulefinal.txt
echo "按照模块统计分析的时间为: /deploy/patchmodulefinal.txt" 

标签:shell,deploy,补丁,更新,echo,awk,增量,txt
From: https://www.cnblogs.com/jinanxiaolaohu/p/16847460.html

相关文章

  • shell免交互与交互
    一,HereDocument免交互1.概述使用I/O重定向的方式将命令列表提供给交互式程序或命令,如cat,read或ftp命令;是标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来......
  • PowerShell 获取虎扑步行街热榜json数据
    代码(curl"https://bbs.hupu.com/all-gambia").ParsedHtml.getElementsByClassName('t-info')|%{$texts=$_.getElementsByTagName('span')@{url=......
  • 记录不存在则插入,存在则更新 → MySQL 的实现方式有哪些?
    开心一刻今天我爸、我、我女儿一起吃饭,我们每人一个鸡腿女儿问道:爸爸,你吃鸡腿吗我以为她要把她的鸡腿给我吃,倍感欣慰地说道:我不吃,宝贝女儿一把抓起我的鸡腿......
  • crontab执行shell脚本
     #!/bin/bashsource/etc/profile#需要导入环境变量,否则非原生命令执行不成功Sendmail(){smtp='mail.yx.com'account='[email protected]'password='123'to='[email protected]'subject=$......
  • shell数组
    一,数组方法一数组名=(value0value1value2…)array1=(1020304050)方法二数组名=([0]=value[1]=value[2]=value…)array2=([0]=10[1]=20[2]=30[3]=40[......
  • Jsch远程执行shell脚本命令
    分享知识传递快乐JSch是JavaSecureChannel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成......
  • Shell实现FTP上传文件,并保存执行日志
    分享知识 传递快乐 这篇文章是 ​​Linux实现FTP上传下载​​ 的续篇文章,关于FTP具体语法使用,请参考《​​Linux实现FTP上传下载​​》。FTP上传文件并保存执行日志#!/......
  • Shell函数(函数定义、函数变量、函数调用、函数传参、函数返回值、获取函数返回值)
    分享知识传递快乐 1、函数定义linuxshell可以用户定义函数,然后在shell脚本中可以随便调用。Shell函数定义的语法格式如下:[function]funname[()]{函数体[retu......
  • Shell实现FTP下载文件,并保存执行日志
    分享知识 传递快乐 这篇文章是 ​​Linux实现FTP上传下载​​ 的续篇文章,关于FTP具体语法使用,请参考《​​Linux实现FTP上传下载​​》。FTP下载文件并保存执行日志#!/......
  • shell函数
    shell函数一,函数的定义(两种方式)1.function函数名{command}//这是一种规范写法2.函数名(){//最常用因为最简洁command}函数定义完之后并不会自动......