perl学习(9) 实例:取出操作时间最长的100个记录
需求描述:
日志记录了一次操作的时间,即server端接收包到发送结果到client端的时间,取出操作时间最长的100个记录。
日志信息片段:
[2013-09-13 15:23:50,445.500] [47028700024080] FATAL - socket = 9
[2013-09-13 15:23:50,446.156] [47028700024080] FATAL - a client connected with ip: 10.10.10.127, name: <unknown>, port: 2314
[2013-09-13 15:23:50,447.375] [1103333696] INFO - recv: with 64 bytes from 10.10.10.127.
[2013-09-13 15:23:50,449.461] [1103333696] INFO - send: 1 with 1 bytes.
.........
[root@sjs_131_126 analyse_time]# cat sort.sh
#!/bin/sh
#cat $1 | perl split.pl
grep -n 'FATAL - socket\|INFO - send:' $1 |awk -F']' '{print $1 $3}'|awk -F'[' '{print $1 "\t"t$2}'> result1.txt
echo "result1 success!" ./analyze.pl result1.txt
echo "result2 success!"
#
cat result2.txt | sort -t: -r | head -100 >result.txt
echo "success!"
说明:
1.第一步,将开始和结束的日志提取到result1.txt
2.第二步,通过analyze.pl计算每次操作的时间写入result2.txt
3.第三步,排序取出前100条
[root@sjs_131_126 analyse_time]# cat analyze.pl
#!/usr/bin/perl -w
use strict;
use warnings ;
use Time::Local; open FD1, ">> result_error.txt" ;
open FD2, ">> result2.txt"; my $need_end = 0;
my ($second, $minute, $hour, $date, $month, $year); my $begin = 0;
my $end = 0;
my $begin_time = 0;
my $end_time = 0; #sample
#6653: 2013-09-11 15:04:35,815.499 FATAL - socket = 8
#6656: 2013-09-11 15:04:35,821.075 INFO - send: 1 with 1 bytes.
while(<>)
{
chomp ;
if($need_end == 0)
{
if(/(\d+):\t(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+),.*\s(INFO|FATAL).*/s)
{
if($8 eq "FATAL")
{
$begin = $1;
$need_end = 1;
($second, $minute, $hour, $date, $month, $year) = ($7, $6, $5, $4, $3 - 1, $2 - 1900);
$begin_time = timelocal($second, $minute, $hour, $date, $month, $year);
#print "$year-$month-$date $hour:$minute:$second\n"
}
else
{
print FD1 "$_\n" ;
$need_end = 0 ;
}
}
else
{
die "match error\n" ;
}
}
elsif($need_end == 1)
{
if(/(\d+):\t(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+),.*\s(INFO|FATAL).*/s)
{
$end = $1;
if( $end == $begin + 3 && $8 eq "INFO")
{
$end = $1;
$need_end = 0;
($second, $minute, $hour, $date, $month, $year) = ($7, $6, $5, $4, $3 - 1, $2 - 1900);
$end_time = timelocal($second, $minute, $hour, $date, $month, $year);
my $duration = $end_time - $begin_time;
print FD2 "$duration:[$begin to $end]\n";
}
else
{
$need_end = 0 ;
print FD1 "$_\n" ; }
}
}
else
{
die "control error\n" ;
}
}
perl学习(9) 实例:取出操作时间最长的100个记录的更多相关文章
- TCP/IP协议学习之实例ping命令学习笔记
TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...
- SQL语句学习手册实例版
SQL语句学习手册实例版 表操作 例1 对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE TABLE STUDENTS (SNO NUMERIC (6, ...
- 160804、oracle查询:取出每组中的第一条记录
oracle查询:取出每组中的第一条记录按type字段分组,code排序,取出每组中的第一条记录 方法一: select type,min(code) from group_info group by ...
- perl学习之路3
Perl编程之路3 标签: perl 列表与数组 Perl里面代表复数的就是列表和数组 列表(list)指的是标量的有序集合, 而数组(array)则是存储列表的变量. 在Perl这两个属于尝尝混 ...
- day9-复习学习python实例
学习实例代码 #求1到100的和print ("##################1到100求和#################")def sum(a,b): s = 0 fo ...
- Perl 学习笔记-标量数据
最近学习Perl, 准备看一遍入门指南,关键的东西还是记录下来,以便以后复习和查看参考. 笔记来自<<Perl语言入门第5版>> 1. 在Perl内部,不区分整数值和浮点数值, ...
- perl学习 之:my local our
范围声明 和全局声明类似,词法范围声明也是在编译时起作用的.和全局声明不同的是,词法范围声明的作用范围是从声明开始到闭合范围的最里层(块,文件,或者 eval--以先到者为准).这也是为什么我们称它为 ...
- perl学习笔记之:模式匹配,模块,文档
Perl语言的最大特点,也是Perl作为CGI首选语言的最大特点,是它的模式匹配操作符.Perl语言的强大的文本处理能力正是通过其内嵌的对模式匹配的支持体现的.模式通过创建正则表达式实现.Perl的正 ...
- perl学习之路2
这些主要是从 "小骆驼" 书上粘贴或者摘抄出来的, 个人认为需要记的语法知识 "在某些情况下, 你可能需要在一台机器上写程序, 再传送到另一台机器上运行.这时候, 请使用 ...
随机推荐
- MVC3 Html.ActionLink
以下使用参数文字说明: linkText:生成的链接所显示的文字 类型:string actionName:对应控制器的方法 类型:string routeValues:向对应的action传递的 ...
- AOI自动光学检测机技术在电路板检查中的应用
1.简述 AOI技术在许多不同的制造业领域使用,自从电子影像技术开始发展,就被各种人利用在不同的应用领域.大家最熟悉的数字相机.数字摄影机是大家生活中最常用到的器材之一,而工业产品的生产也大量使用这些 ...
- VC++中的DDX和DDV
DDX/DDV 通过使用ClassWizard向对话类添加成员变量,你可以利用ClassWizard所提供的高效特征,为对话数据交换和对话数据验证自动生成源代码,也就是人们所熟知的DDX/DDV ...
- android在ubuntu中编译为.apk资料
android在ubuntu中编译为.apk文件 今天我在ubuntu环境之下将android程序编译为.apk文件,特将其过程写下来: 1. 在windows环境下使用MyEclipse编辑好and ...
- Currency System in Geraldion (Codeforces 560A)
A Currency System in Geraldion Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64 ...
- [Swust OJ 715]--字典序问题(组合数预处理/数位dp)
题目链接:http://acm.swust.edu.cn/problem/715/ Time limit(ms): 1000 Memory limit(kb): 65535 在数据加密和数据压缩中 ...
- BZOJ 1096: [ZJOI2007]仓库建设( dp + 斜率优化 )
dp(v) = min(dp(p)+cost(p,v))+C(v) 设sum(v) = ∑pi(1≤i≤v), cnt(v) = ∑pi*xi(1≤i≤v), 则cost(p,v) = x(v)*(s ...
- Altera FPGA中的pin进一步说明
最近END china上的大神阿昏豆发表了博文 <FPGA研发之道(25)-管脚>,刚好今天拿到了新书<深入理解Altera FPGA应用设计>第一章开篇就讲pin.这里就两者 ...
- 建立Go工作环境
最近在折腾Go语言,找了个开源项目nsq研究源代码.不过前两天不小心把系统搞挂了,这次又要重做一遍,记录一下,备忘. 准备: 1. vim+golang插件+ctags(新版本支持Go) 2. Go1 ...
- 往Amazon上upload bundle经常中断的处理方法
首先可以按如下脚本进行重复提交 #!/bin/bash ;i<=;i=i+)) do ret1=`bin/ec2-upload-bundle -b myrawbucket -m /ec2-ami ...