今天在把app proxy平均响应时间加入支撑平台时发现一个问题。同事写的shell脚本和我之前写的shell脚本,所有的app统计结果基本都一致,唯有通知app不一样(同事写的shell脚本, 通知app的平均响应时间居然提高了3倍),难道是我之前写的统计有误?又或者是经过二周,通知系统的响应时间确实提高啦?不肯相信,于是查找原因。
Log日志数据结构
2011-11-10 20:05:42,037 INFO [ProxyLogger] LogInfo [accessTime=2011-11-10 20:05:42, totalTime=15, accessType=2, app=blog, requestUrl
=http://proxy.i.sohu.com/blog/home/entry/edit.htm?_xpt=eWV6aTY3MDUwM0Bzb2h1LmNvbQ==&service=blog&pathinfo=home/entry/edit.htm&id=190
977755, resultCode=200, from=2]
2011-11-10 20:05:46,765 INFO [ProxyLogger] LogInfo [accessTime=2011-11-10 20:05:46, totalTime=7, accessType=2, app=setting, requestU
rl=http://proxy.i.sohu.com/setting/home/privacy.htm?_xpt=bWFveml5dW5Ac29odS5jb20=&service=setting&pathinfo=home/privacy.htm, resultC
ode=200, from=2]
2011-11-10 20:05:47,925 INFO [ProxyLogger] LogInfo [accessTime=2011-11-10 20:05:47, totalTime=14, accessType=2, app=profile, request
Url=http://proxy.i.sohu.com/profile/home/swfUploadIcon.htm?_xpt=cXExNTU2MjA1NTYwQHNvaHUuY29t&service=profile&pathinfo=home/swfUpload
Icon.htm, resultCode=200, from=2]
2011-11-10 20:05:50,039 INFO [ProxyLogger] LogInfo [accessTime=2011-11-10 20:05:50, totalTime=8, accessType=2, app=request, requestU
rl=http://proxy.i.sohu.com/request/home/inform/deal.htm?_xpt=bGluaGFpc2hlbmNodTEyM0Bzb2h1LmNvbQ==&service=request&pathinfo=home/info
rm/deal.htm&id=30293269&type=inform_circle, resultCode=200, from=2]
2011-11-10 20:05:56,558 INFO [ProxyLogger] LogInfo [accessTime=2011-11-10 20:05:56, totalTime=8, accessType=2, app=blog, requestUrl=
http://proxy.i.sohu.com/blog/home/entry/index.htm?_xpt=MTY0MzIzOTEwNkBxcS5jb20=&service=blog&pathinfo=home/entry/index.htm, resultCo
de=200, from=2]
2011-11-10 20:05:57,361 INFO [ProxyLogger] LogInfo [accessTime=2011-11-10 20:05:57, totalTime=14, accessType=2, app=album, requestUr
l=http://proxy.i.sohu.com/album/home/latest/?_xpt=eGluZ2tvbmd4aW5saW5nQHNvaHUuY29t&service=album&pathinfo=home/latest/, resultCode=2
00, from=2]
shell脚本
DATE=`date +"%Y%m%d" -d "-1 days"`
if [ "$1" != "" ];then
DATE=$1
fi
echo "date:"$DATE
apps=`cat proxylog.log.$DATE |awk -F"," '{print $5}'|awk -F"=" '{++s[$2]}END{for(a in s){print a}}'`
for app in $apps;do
#同事写的
stats=`cat proxylog.log.$DATE |grep $app |awk -F"," '{print $3}'|awk -F"=" '{i++;t=t+$2}END{printf int(t/i)}'`
echo "$app $stats"
#我原来写的
stats2=`cat proxylog.log.$DATE |awk -v app=$app -F , '$5==" app="app {print$3}'|awk -F = '{sum+=$2;j++};END{print int(sum/(j))}'`
echo "$app $stats2"
done
统计结果
[@105.165 suc-home]# sh proxylog.sh
date:20111110
album 53
album 53
blog 14
blog 14
request 41
request 135
discuss 90
discuss 90
guestbook 19
guestbook 19
scomment 17
scomment 17
setting 7
setting 7
profile 38
profile 38
video 10
video 10
原因分析
一开始以为是grep 和awk的区别,后来发现不是。抽了半个多小时,发现同事的脚本
stats=`cat proxylog.log.$DATE |grep $app |awk -F"," '{print $3}'|awk -F"=" '{i++;t=t+$2}END{printf int(t/i)}'`
#app为blog,mblog,album,request等
#所以grep $app时为匹配所有request.
2011-11-10 20:06:02,930 INFO [ProxyLogger] LogInfo [accessTime=2011-11-10 20:06:02, totalTime=7, accessType=2, app=blog, requestUrl=
http://proxy.i.sohu.com/blog/home/entry/index.htm?_xpt=MTMyNTYyNDY4OUBxcS5jb20=&service=blog&pathinfo=home/entry/index.htm, resultCo
de=200, from=2]
我们可以看到log数据文件app=blog时也加入统计了,所以一平均就是41了,因为每条log都有
requestUrl关键字,所以相当于统计了所有app的平均响应时间。
记录一下,备忘。
Awk还是很强大的,linux日志统计必备之佳品呀。
分享到:
相关推荐
本文将深入探讨shell编程,以及与之紧密相关的sed、awk和grep命令,这些都是Linux系统中进行文本处理和数据操作的重要工具。 首先,让我们了解什么是Shell编程。Shell是操作系统提供的一个接口,允许用户与系统内核...
sed awk grep sed awk grepsed awk grep sed awk grep sed awk grep sed awk grep sed awk grep sed awk grep sed awk grep
常用linux命令在windows环境下使用 windows grep awk sed cat
最头疼的是,这些重复部分的语法还各不相同,(比如 grep awk sed 都有正则表达式匹配的功能,但是三者的正则表达式语法就不相同) 最最最头疼的是,每个工具还分 GNU 版和不是 GNU 版,之间的差别也很大, 最最最最...
2. **文本处理**:利用`grep`, `sed`, `awk`等命令对文本进行搜索、替换、格式化等操作。 3. **系统信息获取**:使用`date`, `who`, `ps`, `top`等命令获取系统状态和进程信息。 4. **权限管理**:涉及`chmod`, `...
### Linux系统中的查询三剑客:grep、awk、sed 使用详解 #### grep 命令详解 `grep` 是一个非常强大的文本搜索工具,它可以在文本中查找指定的字符串,并且能够逐行处理文本。这使得 `grep` 成为了文本处理和数据...
grep -n “” test1.sh|awk -F: ‘{print ‘}|tail -n1 如图所示: 方法四 代码如下: sed -n ‘$=’ test1.sh 如图所示: 方法五 代码如下: wc -l test1.sh 如图所示: 方法六 代码如下: #cat test1.sh |wc -l...
### Grep、Awk、Sed调研文档 #### 引言 `grep`(全局搜索正则表达式并打印出匹配的行)是一款强大的文本搜索工具,在Linux和Unix环境中广泛使用。它能够根据用户提供的正则表达式在指定的一个或多个文件中查找匹配...
Shell、awk、sed 面试题汇总 以下是从给定的文件中生成的相关知识点: Shell ...这些知识点涵盖了 Shell、awk 和 sed 命令的使用、变量赋值和取值、文件操作、权限设置、数据处理和统计等方面。
### Linux grep sed awk命令详解 #### 一、grep命令详解 **grep** 是一个用于查找文件里符合条件的字符串的强大工具。它可以对文件进行快速搜索,找出含有特定模式的行。 - **基本语法**:`grep [选项] 模式 文件...
第16章 shell脚本介绍 151 第17章 条件测试 154 第18章 控制流结构 160 第19章 shell函数 202 第20章 向脚本传递参数 224 第21章 创建屏幕输出 236 第22章 创建屏幕输入 252 第23章 调试脚本 274 第24章 shell嵌入...
"awk_unix.shell"标签表明AWK是作为UNIX Shell的一部分使用的,通常与其他shell命令如grep、sed等结合使用,形成强大的数据处理流程。在Shell脚本中,AWK可以用来处理复杂的数据操作,而无需编写完整的程序。 "awk...
Linux系统中,文本处理是一项常见且重要的任务,grep、sed和awk是三个常用的文本处理工具,因其功能强大,被誉为Linux文本处理的"三剑客"。下面将详细总结这三个工具的使用方法和相关知识点。 ### grep grep是用于...
在IT领域,文本处理是日常工作中不可或缺的一部分,而grep、sed、awk和perl这四个工具在处理文本时都广泛地使用了正则表达式。它们各自有着不同的特性和适用场景,理解它们之间的差异有助于我们更高效地进行文本操作...
在Unix/Linux环境中,shell、awk和sed是三个非常重要的命令行工具,它们各自有着独特的功能和用途。下面是对这三个工具的常用命令和语法的详细解释。 **Shell**,尤其是Bash shell,是Unix和Linux系统中的默认交互...
例如,`iostat -d -k`命令显示主机磁盘的I/O统计信息,通过管道`|`连接到`awk`,可以定制输出内容。如示例所示,`NR==4{print "Device="$1 " read/s="$3 " wrt/s="$4 " read="$5 "wrt="$6}`这行命令会打印出第四行的...
Linux Shell 脚本编程基础知识点总结 Linux 脚本编写基础 1.1 语法基本介绍 * `#!` 符号用来告诉系统它后面的参数是用来执行该文件的程序 * 在 Linux 中,使用 `/bin/sh` 来执行程序 * 编辑好脚本后,需要使其可...
grep命令是Linux系统中非常重要的文本搜索工具,它可以对文件中的内容进行搜索,并根据用户的搜索模式,显示出包含该模式的行。grep是Global Regular Expression Print的缩写,它支持POSIX基本正则表达式和扩展正则...