1、分析日志格式如下
. . imported "xxx_330508"."xxx_T_DATA" 46.17 MB 268 rows . . imported "xxx_330508"."xxx_T_CAUSERLOG" 24.74 MB 72246 rows . . imported "xxx_330508"."xxx_T_UIQUERYFORM" 23.98 MB 124432 rows . . imported "xxx_330508"."P#xxx_T_PAPAGE" 23.82 MB 102843 rows . . imported "xxx_330508"."yyyyy" 15.90 MB 8946 rows |
这里我主要关注红色部分的总和。
2、用于分析上述日志的shell脚本如下:
# vi oracle_ayalyze_dpfile.sh |
#!/bin/sh #echo -n "Please input analyze filename:" #read filename val01=`egrep -o "([0-9\.0-9]+? GB)" $1 |egrep -o "([0-9\.0-9]+?)" | awk '{sum+=$0*1024*1024}END{print sum}' | awk '{print $0*1}'` val02=`egrep -o "([0-9\.0-9]+? MB)" $1 |egrep -o "([0-9\.0-9]+?)" | awk '{sum+=$0*1024}END{print sum}' | awk '{print $0*1}'` val03=`egrep -o "([0-9\.0-9]+? KB)" $1 |egrep -o "([0-9\.0-9]+?)" | awk '{sum+=$0}END{print sum}' | awk '{print $0*1}'` val=`echo "$val01+$val02+$val03" | bc` val=`echo "scale=2;$val/1024/1024" | bc` echo $val"GB" |
测试: |
# /home/oracle/oracle_ayalyze_dpfile.sh /u01/app/oracle/admin/orcl/dpdump/db_xc161125.log 12.37GB |
解释: |
1)egrep -o "([0-9\.0-9]+? GB)" $1 -- 使用egrep查找匹配数据,egrep默认支持正则表达式,grep不支持正则,除非指定参数-E,参数-o表示仅返回匹配字段值,否则返回整行数据。"([0-9\.0-9]+? GB)"这部分是正则规则,目的匹配日志中红色字段内容,$1表示分析文件通过参数方式传递。 |
2)egrep -o "([0-9\.0-9]+?)" -- 在上一步分析的基础上去掉单位 |
3)awk '{sum+=$0*1024*1024}END{print sum}' --使用awk对上一步的分析结果做一个求和的操作,即sum。 |
4)awk '{print $0*1}' --为了防止大数字使用科学计数法表示 |
5)val=`echo "$val01+$val02+$val03" | bc` --对上面计算出的3个结果进行一个求和操作,单位为kb |
6)val=`echo "scale=2;$val/1024/1024" | bc` --将单位为kb的结果转换为单位为gb的结果 |
7)echo $val"GB" --输出结果,打印在控制台 |