使用shell进行日志分析(r2第14天)

最近做数据批量加载的时候,是通过pl/sql嵌在shell脚本里执行的。 脚本运行后生成的日志类似如下的格式

Get Dump file for APP_TMP.TESTRESS_NAME_LINK...
Elapsed: 00:00:00.64
.
DB details is accessible from source schema ...
.
DB details is accessible from target schema ...
.
Directory  ext_datapump_dir has read,write permission ,proceed...
.
SYNONYM TESTEEMENT exists in CONNECT account,proceed...
.


Get Dump file for APP_TMP.TESTEEMENT...
Elapsed: 00:00:00.49
.
DB details is accessible from source schema ...
.
DB details is accessible from target schema ...
.
Directory  ext_datapump_dir has read,write permission ,proceed...
.
SYNONYM TESTEEMENT_RESOURCE exists in CONNECT account,proceed...
.

因为表比较多,所以日志看起来不是很清晰,想生成类似报表的格式来查看每个表耗费了多长时间,就一目了然了。

期望的结果类似下面的样子。

#########################################################################
Table_name                                          Elapsed        time  
#########################################################################
APP_TMP.TESTRESS_DATA...                            Elapsed: 00:00:01.13  
APP_TMP.TESTRESS_NAME_LINK...                       Elapsed: 00:00:00.64  
APP_TMP.TESTEEMENT...                               Elapsed: 00:00:00.49  
APP_TMP.TESTEEMENT_RESOURCE...                      Elapsed: 00:00:00.74  
APP_TMP.TEST_RES_HISTORY...                         Elapsed: 00:00:00.82  
APP_TMP.TEST_ACCOUNT...                             Elapsed: 00:00:01.03  
APP_TMP.TEST_ADDRESS_NAME...                        Elapsed: 00:00:00.78  
APP_TMP.TEST_AGED_TRIAL_BALANCE...                  Elapsed: 00:00:01.16  
APP_TMP.TEST_BILLING_ARRANGEMENT...                 Elapsed: 00:00:00.61  
APP_TMP.TEST_CHARGE_GROUP...                        Elapsed: 00:00:01.66  
APP_TMP.TEST_CHARGES...                             Elapsed: 00:00:06.73  
APP_TMP.TEST_CREDIT_DEBIT_LINK...                   Elapsed: 00:00:01.67  
APP_TMP.TEST_CUSTOMER_CREDIT...                     Elapsed: 00:00:00.40  
APP_TMP.TEST_DEPOSIT_REQUEST...                     Elapsed: 00:00:00.10  
APP_TMP.TEST_DIRECT_DEBIT_REQUEST...                Elapsed: 00:00:00.67  
APP_TMP.TEST_INVOICE...                             Elapsed: 00:00:01.98  
APP_TMP.TEST_PAY_CHANNEL...                         Elapsed: 00:00:00.53  
APP_TMP.TEST_PAYMENT...                             Elapsed: 00:00:01.28  
APP_TMP.TEST_PAYMENT_ACTIVITY...                    Elapsed: 00:00:00.19  


首先是根据关键字找到对应的行,下一行就是耗费的时间。想通过命令简单的实现。最后grep帮了大忙。
grep   -A1  --color=auto  "Get Dump file for "  extract.log
输出类似下面的样子。
--
Get Dump file for APP_TMP.TESTTOMER...
Elapsed: 00:00:00.91
--
Get Dump file for APP_TMP.TESTNT_DISTRIBUTE...
Elapsed: 00:00:00.84
--
Get Dump file for APP_TMP.TEST_MEMO...
Elapsed: 00:00:22.27
--
Get Dump file for APP_TMP.TESTE_DATA...
Elapsed: 00:00:01.55
--

达到了初步效果。就需要把冗余的信息去除“Get Dump file for ",然后能让对应的执行时间横向显示。
可以使用sed来做。
sed 's/Get Dump file for //' |sed 'N;N;s/\n/  /g'

APP_TMP.TESTRESS_DATA...  Elapsed: 00:00:01.13  --
APP_TMP.TESTRESS_NAME_LINK...  Elapsed: 00:00:00.64  --
APP_TMP.TESTEEMENT...  Elapsed: 00:00:00.49  --
APP_TMP.TESTEEMENT_RESOURCE...  Elapsed: 00:00:00.74  --

效果基本达到了,但是显示比较粗糙,不规整,这个时候awk能帮上大忙了。
使用如下的脚本来格式化输出
awk '
BEGIN{
print "#########################################################################"
printf "%-50s %8s %11s  \n", "Table_name","Elapsed","time"
print "#########################################################################"
}
{printf "%-50s %8s %11s  \n", $1,$2,$3,$4
}'


这样环环相扣,就可以输出基本完整的报告了。完整命令如下:
grep   -A1  --color=auto  "Get Dump file for "  extract.log |sed 's/Get Dump file for //' |sed 'N;N;s/\n/  /g' |awk '
BEGIN{
print "#########################################################################"
printf "%-50s %8s %11s  \n", "Table_name","Elapsed","time"
print "#########################################################################"
}
{printf "%-50s %8s %11s  \n", $1,$2,$3,$4
}'

输出:
#########################################################################
Table_name                                          Elapsed        time  
#########################################################################
APP_TMP.TESTRESS_DATA...                            Elapsed: 00:00:01.13  
APP_TMP.TESTRESS_NAME_LINK...                       Elapsed: 00:00:00.64  
APP_TMP.TESTEEMENT...                               Elapsed: 00:00:00.49 

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-06-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2110
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏飞扬的花生

jsencrypt参数前端加密c#解密

      写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度...

3899
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2665
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2872
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

3008
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4948
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

32210
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4055
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4878

扫码关注云+社区