这周写了两个脚本,不算太难,但是每一个都让我有所感悟.....
第一个脚本是这样的:分析一个12G大小的 apache cookie_log,从中删选出指定数据然后分析统计
我的原先做法是: sed 's/.../../' | awk '{...}' ,即先用sed命令对数据进行替换,增加修改成我希望的样子,然后再用awk分析统计
这样看貌似没什么问题,但是如果原始数据很大(比如我这里的12G),执行起来就很耗时了
我自己思考了一下原因,觉得是由于由于管道(|),使得我相当于对文件读取了两次(当文件很大的时候),鉴于此我后来只用一个命令awk处理,并且把指令写到一个文件中,结果发现,效率果然有了较大的提高,只花了原先的1/10时间。
所以当我们处理一个较大文件,并且需要比较复杂的分析时,请减少管道的使用,尽量在一个awk命令中完成,并且最好把命令写成文件的形式,既保证可读性又提高复用性
第二个脚本是这样的:需要将一个项目里(有11个svn分支)中的某四个方法,替换成另外的四个方法
我的第一反应是写四个类似这样的方法:find . -name "*.java" | xargs sed -i 's/../../'
但是我自己一想,这样岂不是要遍历目录4遍,效率肯定不行,于是乎,我自己写了个遍历文件夹的方法,如果遇到的是文件就进行内容替换(4种),如果还是目录则进行子目录递归,这样保证了我只需要遍历一次
等我实现这种方式以后,我发现了一个很不好的地方,就是脚本有点长,可读性也不太好(虽然我抽了几个函数),于是我又用第一种老土的方式又实现了一遍,结果是出乎意料的
首先,代码可读性好,逻辑清楚(1.先拉svn分支,然后调用replace函数替换内容,其中replace函数就是那四个find替换命令)
其次,效率也很好(应该比我自己写的遍历目录方法快),因为你自己写遍历函数需要通过for,if这的shell语句去控制逻辑,并且中间过程中还需要执行外部命令,譬如cd,但是find 就不一样了,所以都这些都在一个命令中完成,因此它的效率会更高
所以,通过这个脚本我发现,写脚本首先要注重可读性和可维护性,其次善于用现有的命令去实现自己需要的功能(譬如这里的find遍历目录功能)
分享到:
相关推荐
帮助解决Oracle中存储过程自动备份得脚本及添加任务计划过程得详细解说 帮助解决Oracle中存储过程自动备份得脚本及添加任务计划过程得详细解说
主要介绍了如何在python中写hive脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
TIA博途WINCC中通过VBS脚本执行向文件中读写数据的具体操作步骤
一个用lua写的游戏脚本实例,是word格式的,值得一看,通过这个例子你可以了解到游戏中的脚本是怎么写的
WINCC中使用VBS脚本读写SQLServer数据库文件WINCC中使用VBS脚本读写SQLServer数据库文件WINCC中使用VBS脚本读写SQLServer数据库文件WINCC中使用VBS脚本读写SQLServer数据库文件
执行存储过程的代码和数据库脚本,代码简单易懂,适合初级人士
本附件是一个生成工作周的脚本(每月的第一个星期一为本月的第一个星期开始)
wincc脚本学习,通过本脚本的学习,能够很好地掌握wincc读取excel脚本!
学习shell脚本,了解linux知识。
串口工具 可以自己写脚本 不错的串口工具 可以自己写脚本 不错的
QTP脚本还可以这样写 录制测试人员的操作过程,再回放出来并多次运行,达到使用机器代替人来执行测试的效果
linux系统中使用shell脚本对oracle存储过程进行编译
脚本,学习写脚本的好例子,不防参考一下。
shell脚本一个读写sd卡的案例,这个例子可以帮助出学者进步了解shell编程
自己编写的db2备份脚本,在linux测试过,绝对好用!
genesis2000脚本编写C#语言源码共享,写脚本的用的上!
powerdesigner的大小写转换脚本,直接在powerdesigner里面找到执行脚本的地方,粘贴进去执行一下就可以了。 powerdesigner的大小写转换脚本 powerdesigner的大小写转换脚本
wincc中使用VBS脚本读写SQLServer数据库文件
VBS脚本读写EXCEL方法介绍
写脚本用SciTE 游戏脚本编辑。dat