Electronic Joint Business

Solution for E-Business

脚本语言

AWK 语法入门 (一)

AWK 和 GAWK

在日常工作中,我们会遇到许多需要理解和提取文本的要求。一般来说,简单的要求,我们可以使用 grep,复杂的,可能会采用Perl 和其他的解决方案。在本系列文章中,我们要介绍的一种专门为文本处理和模式匹配而生的语言 — AWK,这个古怪的名字其实来自于它的三个主要作者的首字母缩写:Drs. A. Aho、P. Weinberger 和 B. Kernighan。

简单描述一下 AWK 的工作方式:AWK 的程序语句描述了需要处理的数据的模式和操作,运行时,AWK在其输入的数据中搜索包含模式的记录,然后对该记录进行指定的操作,,所以 AWK 非常擅长于处理数据库和表型数据,如从多个数据集中提取一些列、建立报表或分析数据等等。AWK能够用很短的程序对文档里的资料做修改、比较、提取、打印等处理,并且能和管道一起使用,是管理员和程序员一个不可缺少的工具。

AWK的主要功能是针对文件的每一行(line),也就是每一条记录,搜寻指定的格式。当某一行符合指定的格式时,AWK就会在此行执行被指定的动作。AWK依此方式自动处理输入文件的每一行直到输入文件档案结束。因此 AWK 也被称作是数据驱动的语言。AWK经常用在如下的几个方面:

  • 根据要求选择文件的某几行,几列或部分字段以供显示输出。
  • 分析文档中的某一个字出现的频率、位置等。
  • 根据某一个文档的信息准备格式化输出。
  • 以一个功能十分强大的方式过滤输出文档。
  • 根据文档中的数值进行计算。
  • AWK 存在着几个不同的版本,比如早期的版本称为 OAWK (old awk),而Dr. Kernighan 又维护了一个 NAWK(New AWK),随着 GNU 项目的蓬勃发展,又出现了 GAWK,它主要是为了替代 OAWK,并包含了 NAWK 的一些特性。

    >>> 阅读全文

     

    , ,

    Groovy 1.0 用户指南 (三) 类和闭包

    Groovy 的语法是始终围绕灵活性这个特性进行设计的 。灵活性是更有效地开发代码的主要因素。Groovy 语言是建立在总有一天 Java 平台要包括一种敏捷开发语言这一信念上的 (Richard Monson-Haefel),因此, Groovy 除了是种面向过程和面向对象的语言外,它还包含了实现函数式编程一些东西。

    函数编程
    我们知道例如Lisp、Scheme、Haskell、ML (或其他一些语言)采用了函数式编程。但“到底什么是函数式编程 (FP)?”不幸的是,即使是函数程序员他们自己也很难对 FP 究竟是什么有个一致的认识。

    David Mertz 认为函数式编程粗略地描绘为至少具有以下几个特征:

  • 函数是第一类(对象)。即,可以对“数据”进行的每样操作都可以使用函数本身做到(例如将一个函数传递给另一个函数)。
  • 将递归用作主要的控制结构。在某些语言中,不存在其它“循环”构造。
  • 重点集中在列表 Litt 处理(例如Lisp )。列表经常和子列表的递归一起使用以替代循环。
  • “纯”函数语言能够避免副作用。这不包括在命令语言中最普遍的模式,即指定第一个,然后将另一个值指定给同一个变量来跟踪程序状态。
  • FP 不鼓励或根本不允许出现 语句,取而代之是使用表达式求值(换句话说,即函数加上自变量)。在很纯粹的情况下,一个程序就是一个表达式(加上支持的定义)。
  • FP 关心的是计算 什么而不是 如何计算。
  • 许多 FP 利用了“更高等级”函数(换句话说,就是函数对一些函数操作,而这些函数又对其它函数操作)。
  • 函数编程的提倡者认为所有这些特征都导致更快速的开发更短以及错误更少的代码。而且,计算机科学、逻辑和数学领域的高级理论学家发现证明函数语言和程序的正式性能比命令语言和程序容易得多。


    在字节码水平,Groovy 类是真正的 Java 类。Groovy的类与Java类相似:

    >>> 阅读全文

     

    , ,

    Groovy 1.0 用户指南 (二) 语法基础

    Groovy的基础语法
    Groovy 有很多优点。它很好地融合了 Ruby、Python 和 Smalltalk 的一些最有用的功能,同时保留了基于 Java 语言的核心语法。对于Java 开发人员,Groovy 提供了更简单的替代语言,且几乎不需要学习时间。对于刚接触 Java 平台的开发人员,它可以作为有更复杂语法和要求的 Java 语言的一个容易的入口点。

    语法
    Groovy的语句和Java类似,但是有一些特殊的地方。例如语句的分号是可选的。如果每行一个语句,就可以省略分号;如果一行上有多个语句,则需要用分号来分隔。

    x = [1, 2, 3]
    println x
    y = 5;
    x = y + 7
    println x
    assert x == 12

    字符串
    Groovy中的字符串允许使用双引号和单引号。当使用双引号时,可以在字符串内嵌入一些运算式,Groovy允许您使用 与 bash 类似的 ${expression} 语法进行替换。可以在字符串中包含任意的Groovy表达式。

    name="James"
    println "My name is ${name},’00${6+1}’"
    //prints My name is James,’007′

    Groovy还支持”\uXXXX” 引用(其中X是16进制数),用来表示特殊字符,例如 “\u0040” 与”@”字符相同。

    大块文本
    如果有一大块文本(例如 HTML 和 XML)不想编码,你可以使用Here-docs. here-docs 是创建格式化字符串的一种便利机制。它需要类似 Python 的三重引号(“””)开头,并以三重引号结尾。

    >>> 阅读全文

     

    ,

    Groovy 1.0 语法指南 (一) 语法特性

    前言

    Groovy 是基于 JRE 的脚本语言( Script ),是由James Strachan 和 Bob McWhirter 这两位天才发明的,(JSR 241 2004 年 3 月)。和Perl,Python等等Script的设计初衷一样,作者希望Groovy能快速简洁地完成一些工作:如访问数据库以编写报告,编写单元测试用例(Unit Test Case),快速实现产品原型(ProtoType) 等等。由于Groovy 1.0和我(ray_linn) 之前发布的Groovy系列(基于1.0 JSR)有较大区别,请有转载的朋友自行更新。

    同时为了降低学习曲线,Groovy 的语法和Java 近似,并吸收了 Ruby,Python 和SmallTalk 的一些特点,因此 Groovy 在某些场合可以扮演一种 “咖啡伴侣”的角色。那么Groovy 和 Java 相比,有什么变化呢? Groovy 和大部分Scripts一样:

  • 不用编译,通过解释运行。
  • 允许动态类型。
  • 合成结构容易。
  • 所以Groovy 是一种特别容易学习和使用的语言.

    我们先借用IBM Groovy教程中的例子,下面的代码利用了Freemarker模板引擎来创建一个Template对象,然后将内容打印到标准输出。例(1)是Java代码,例(2)是Groovy代码。可以看到二者非常的类似。

    >>> 阅读全文

     

    , , ,