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

使用,shell,进行,简单,分析,增量,更新,时间,方法 · 浏览次数 : 115

小编点评

**方法思路** 1. **获取更新日志:**使用 `grep` 命令对日志文件中搜索 `开始安装补丁` 和 `补丁安装完成` 的字符串,并提取更新时间。 2. **按更新顺序获取补丁列表:**使用 `grep` 和 `awk` 命令将日志文件中所有 `开始安装补丁` 和 `补丁安装完成` 的字符串提取出来,并按更新顺序排序。 3. **分析补丁更新时间:**使用 `awk` 命令将所有 `开始安装补丁` 和 `补丁安装完成` 的字符串从日志文件中提取出来,并根据它们的顺序排序。 4. **备份文件:**使用 `sed` 命令将日志文件中的开始安装补丁和安装完成后的代码部分备份到 `code.txt` 和 `code_back.txt` 文件中。 5. **获取补丁数量:**使用 `sed` 命令从日志文件中提取所有 `开始安装补丁` 和 `补丁安装完成` 的字符串,并使用 `awk` 命令将它们累计起来,并将其赋值给变量 `j`。 6. **分析补丁更新时间:**使用 `awk` 命令将所有 `开始安装补丁` 和 `补丁安装完成` 的字符串从 `code.txt` 和 `code_back.txt` 文件中提取出来,并根据它们的顺序排序。 7. **生成最终结果文件:**使用 `awk` 命令将所有分析结果合并到一个文件中,并将其命名为 `finaltime.txt`。 8. **使用 Excel 进行分析:**使用 Excel 打开 `finaltime.txt` 文件,并进行数据分析。 **其他提示** * 使用 `grep` 和 `awk` 命令时,使用正则表达式以捕获目标字符串。 * 使用 `sed` 命令进行文件处理时,使用分隔符 ":" 来指定分隔符。 * 使用 `sort` 命令对文件按更新时间进行排序。 * 使用 `awk` 和 `sed` 命令进行数据分析时,使用 `sum` 和 `count` 等变量来优化性能。

正文

使用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进行简单分析增量更新时间的方法相似的内容:

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

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

jcmd的简要分析命令

# jcmd的简要分析命令 ## 背景 ``` 端午加班一整天. 回到家同事让他们抓取一下堆栈信息好进行分析 连上VPN后就进行了一下处理. 自己简单看了下堆栈的总数等信息. 同事使用工具进行了分析. 我这边其实下过很多工具,但是都荒废了 就想,自己这些时间一直学习shell, 可以手工写一个简单分

[转帖]linux shell中 if else以及大于、小于、等于逻辑表达式介绍

https://www.jb51.net/article/34332.htm 在linux shell编程中,大多数情况下,可以使用测试命令来对条件进行测试,这里简单的介绍下,方便需要的朋友 比如比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。注意:这里的空格很重要。要确保方

[转帖]Linux命令之ulimit命令

一、命令简介 ulimit是一个计算机命令,用于shell启动进程所占用的资源,可用于修改系统资源限制。使用ulimit命令用于临时修改资源限制,如果需要永久修改需要将设置写入配置文件/etc/security/limits.conf。 二、使用示例 1、查看当前资源限制设置 [root@test1

[转帖]使用 Shell 运算进行进制转换 16进制转10进制

使用 Shell 运算进行进制转换 工作时候常常遇到一些问题,拿到的数字是16进制的,但是运算的时候是10进制的,shell可以很方便的处理这类的进制转换问题,一种情况是使用 Shell 运算把一个数字从给定的进制转换位十进制。如果数字以运算展开式的形式提供,那么假定它带有十进制符号,除非 它前面带

使用shell 方式对 vcenter 进行补丁升级

使用shell 方式对 vcenter 进行补丁升级 背景:最近VMware官网发布了最新的VMware vCenter Server 7.0 iso补丁文件,为了安全起故此对vCenter 进行安全补丁升级。 VC版本:vCenter 7.0.3 参考链接:VMware vCenter Serve

[转帖]shell脚本实现文本内容比较交互程序

背景介绍 脚本基于Comm命令进行功能封装,考虑到命令执行前需要对文本进行排序,并且在多文件需要比较内容时可能会导致多个文本混乱,因此使用Shell封装成了一个交互式程序,快速对文件内容进行判断和输出想要的内容内容结果。 脚本介绍 文件内容校验(是否一致内容)定制化输出文本(1.仅文本单独出现内容;

[转帖]linux 批量修改文件格式

将Windows上的shell脚本拷贝到Linux时,脚本的编码格式还是docs,需要改成unix才可执行,在文件不多的情况下可以直接手动更改,但是在脚本文件比较多的时候,手动改起来就太麻烦了,此时就可以使用shell命令批量来进行更改。 批量更改脚本如下: for i in `find . -ty

[转帖]在KingbaseES数据库中批量创建数据库/表

1. 问题 如何在KingbaseES中批量创建表和库? 2. 通过shell脚本文件实现 有时候我们在进行测试的时候需要进行批量的建库以及建表,这时我们可以使用shell脚本实现或者是SQL实现,shell脚本实现时内容如下: user=system #用于配置数据库的用户名 port=54587

[转帖]shell脚本使用expect自动化交互登录远程主机进行批量关机

前文 1.目标主机登录用户都为root,且密码一致 2.目标主机开放启动了SSH服务且22号端口可访问(防火墙未进行拦截) 软件介绍 expect Expect是一个用来实现自动和交互式任务进行通信的免费编程工具语言。由Don Libes在1990年开始编写。 结合Shell Script实现自动和