用bash统计异常数
这里有一个使用bash的例子,你可能会在一个典型的项目中遇到类似的情况。当时我在一个已经有6年历史的大型Java项目中工作(我只是一个访客,在第6年进入这个项目,并在上面工作了大概8个月)。我的任务之一就是清理一些经常发生的异常,为此我做的第一件事就是提问:"哪些异常会被抛出?以什么样的频率?"当然了,没人知道,所以我的第一个任务就是自己动手找到答案。但问题是这个应用程序每星期会吐出超过2 GB的日志,很快我就意识到:即便只是尝试用文本编辑器打开这个文件,那都是在浪费时间。于是我坐下来,写了这么一段脚本:
#!/bin/bash |
表4-2解释了这段bash小脚本的作用。
表4-2. 用于统计异常数量的复杂bash命令
文字 |
用途 |
egrep -o |
找出日志文件中出现在“Exception”字眼之前的文字,对它们进行排序,然后得到一个消除重复之后的列表 |
"[A-Z]\w*Exception" |
用于定位异常信息的正则模式 |
log_week.txt |
庞大的日志文件 |
| sort |
将前面的查找结果管道给sort,生成一个排序后的异常列表 |
| uniq |
去掉重复的异常信息 |
for X in $(. . .) ; |
循环前面生成的异常列表,针对其中的每个异常执行这些代码 |
echo -n -e "processing $X\t" |
把找到的异常输出在控制台上(这样我才知道这段脚本还在工作) |
grep -c "$X" log_week.txt |
在庞大的日志文件中找出这个异常出现的次数 |
这个项目到现在还在使用这段小程序。这是一个好例子:借助自动化工具,你可以从项目中找出一些从未有人发现的、有价值的信息。与其绞尽脑汁地猜测有哪些异常被抛出,不如把它们都找出来,这样也可以更有目的性、更容易地修复这些抛出异常的程序。
【编辑推荐】