`
DiaoCow
  • 浏览: 244212 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

这周写脚本过程中的一点收获

 
阅读更多
这周写了两个脚本,不算太难,但是每一个都让我有所感悟.....

第一个脚本是这样的:分析一个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遍历目录功能)






分享到:
评论

相关推荐

    一个用lua写的游戏脚本实例

    通过分析提供的游戏脚本实例,我们可以了解到游戏中脚本的设计和实现过程。下面是相关的知识点: 1. 游戏脚本的基本结构:游戏脚本通常包含游戏的逻辑、规则和机制的实现。从提供的实例中,我们可以看到游戏脚本的...

    genesis2000脚本编写C#语言源码共享,写脚本的用的上!

    3. **异常处理**:利用C#的异常处理机制,可以有效地捕获和处理在脚本执行过程中可能出现的问题,保证程序的稳定运行。 4. **多线程编程**:C#支持多线程编程,开发者可以利用这一特性并行执行多个任务,提升脚本的...

    Bootloader刷写脚本

    Bootloader刷写脚本是计算机系统中至关重要的一个环节,特别是在嵌入式系统和移动设备领域。Bootloader作为系统的引导程序,负责初始化硬件、加载操作系统内核并传递控制权,使得设备能够正常启动。理解Bootloader...

    shell脚本编译Oracle存储过程

    linux系统中使用shell脚本对oracle存储过程进行编译

    WINCC中使用VBS脚本读写SQLServer数据库文件

    通过以下几个步骤,我们将深入探讨这一过程中的关键技术点: 1. **数据库的创建与配置**:包括如何在SQL Server中创建数据库文件及表结构。 2. **WINCC变量与数据库表的映射**:确保WINCC中变量与数据库表字段类型...

    传奇多功能脚本编辑器_编辑器_firmwkb_传奇脚本_传奇脚本开发_传奇功能脚本_

    这个编辑器可能集成了这些过程中的多种工具,如版本控制、项目管理、错误追踪等功能,使得整个开发流程更加顺畅。同时,对于新手开发者来说,编辑器可能还提供了丰富的教程和示例,帮助他们快速上手。 "传奇功能...

    通过ISS打包ISS脚本

    【标题】:“通过ISS打包ISS脚本”是指使用Inno Setup这款软件来创建Windows平台的安装程序的过程。Inno Setup是一款免费的安装制作工具,它能够帮助开发者将应用程序及其依赖项打包成用户友好的安装包,便于在...

    material studio交联脚本

    本文将重点解析"material studio交联脚本",并探讨其在环氧树脂交联过程中的应用以及如何修改以适应其他体系。 交联脚本通常是指使用编程语言(如Perl)编写的一系列指令,用于控制Material Studio进行特定的模拟...

    android系统中调用shell脚本

    然而,对于非root用户来说,确实有一些方法可以实现对shell脚本的调用,尤其是在开发和调试过程中。下面我们将深入探讨如何在Android应用中执行shell脚本以及相关知识点。 首先,我们需要理解Android的沙箱机制。每...

    wincc中使用VBS脚本读写SQLServer数据库文件

    wincc中使用VBS脚本读写SQLServer数据库文件

    shell脚本读写sd卡的案例

    shell脚本一个读写sd卡的案例,这个例子可以帮助出学者进步了解shell编程

    Genesis2000拼板脚本.rar

    《Genesis2000拼板脚本》是一个专注于在印刷电路板(PCB)设计领域中的工具,主要用于优化PCB布局的拼版过程。在PCB设计中,拼版是将多个独立的电路板单元组合成一个大板,以便于制造和降低成本。 Genesis2000是一款...

    WinCC常用C和VBS脚本.pdf

    在本文档中,我们将重点介绍WinCC中C脚本和VBS脚本的使用,特别是针对变量的置位、复位、取反以及读写操作等常用功能。WinCC是西门子提供的一款用于监控和控制工业系统的软件,而C脚本和VBS脚本是WinCC中支持的两种...

    脚本shell写的,一些工作脚本集合

    标题“脚本shell写的,一些工作脚本集合”表明这是一个包含多种实用Shell脚本的资源库,可能涵盖了各种不同的工作场景。 描述中提到这些脚本是“平时积累起来的”,这暗示了这些脚本经过时间的检验,具有实用性,...

    批处理书籍-windows,写脚本神奇啊

    批处理书籍-windows,写脚本神奇啊

    PADS常用脚本文件

    在这个压缩包中,包含了四个常用的脚本文件,每个都有特定的功能,下面将详细解释这些脚本的作用及其相关的知识点。 1. **根据PCB直接列出BOM(Bill of Materials)**: 这个脚本的主要功能是将PCB设计中的元件...

    wincc 7.0 脚本解密

    本文将详细介绍WinCC 7.0中C脚本的工作原理,以及如何进行脚本解密,帮助读者更好地理解和利用这一功能。 一、WinCC 7.0 C脚本简介 WinCC 7.0支持的C脚本基于Microsoft的Visual C++,允许开发者用C语言编写控制逻辑...

    VC中 使用VBA脚本

    这个脚本可能涵盖了如何在VC环境中启动和执行VBA、如何与C++代码交互、如何创建和响应用户事件等方面的知识。通过查看和分析这个文件,你可以学习到如何将VBA脚本集成到VC项目中,并理解其实际应用场景。 例如,...

    自写的一个脚本处理器.可模拟鼠标键盘点击

    标题中的“自写的一个脚本处理器.可模拟鼠标键盘点击”揭示了这是一个使用Delphi编程语言编写的程序,它的主要功能是处理特定的脚本,并能够模拟用户的鼠标和键盘操作。这个工具可能被用于自动化测试、游戏挂机、...

    ad logo导入脚本.zip

    标题“ad logo导入脚本.zip”表明这是一个包含与在Altium Designer(AD)中导入徽标(logo)相关的脚本的压缩文件。Altium Designer是一款广泛使用的PCB(印制电路板)设计软件,用于电子设计自动化。在这个压缩包中...

Global site tag (gtag.js) - Google Analytics