Linux 版 (精华区)

发信人: superman (风雨无阻), 信区: Unix
标  题: ◇ gawk 手册(4)
发信站: 紫 丁 香 (Mon Jun 29 07:33:38 1998), 站内信件

【 以下文字转载自 cnlinux 讨论区 】
【 原文由 Gamble_Tan@bbs.ustc.edu.cn 所发表 】

第九章  使用者定义的函式(User-defined Functions)

    复杂的 gawk 程式常常可以使用自己定义的函式来简化。呼叫使用
者定义的函式与呼叫内建函式的方法一样。



  9.1 函式定义的格式

    函式的定义可以放在 gawk 程式的任何地方。

    一个使用者定义的函式其格式如下:

        function name (parameter-list) {
           body-of-function
        }

name 是所定义的函式之名称。一个正确的函式名称可包括一序列的字
母、数字、下标线 (underscores),但是不可用数字做开头。
    parameter-list 是列出函式的全部引数(argument),各个引数之
间以逗点隔开。

    body-of-function 包含 gawk 的叙述 (statement)。它是函式定义
里最重要的部份,它决定函式实际要做何种事。



  9.2 函式定义的例子

    下面这个例子,会将每个记录的第一个栏位之值的平方与第二个
栏位之值的平方加起来。

{print "sum =",SquareSum($1,$2)}
function SquareSum(x,y) {
    sum=x*x+y*y
    return sum
}



第十章  □例

    这里将列出 gawk 程式的一些例子。

gawk '{if (NF > max) max = NF}
      END {print max}'
    此程式会印出所有输入行之中,栏位的最大个数。

gawk 'length($0) > 80'
    此程式会印出一行超过 80 个字元的每一行。此处只有 pattern 被
    列出,action 是采用内定的 print。

gawk 'NF > 0'
    对於拥有至少一个栏位的所有行,此程式皆会印出。这是一个简
    单的方法,将一个档案里的所有空白行删除。

gawk '{if (NF > 0) print}'
    对於拥有至少一个栏位的所有行,此程式皆会印出。这是一个简
    单的方法,将一个档案里的所有空白行删除。

gawk 'BEGIN {for (i = 1; i <= 7; i++)
                print int(101 * rand())}'
    此程式会印出□围是 0 到 100 之间的 7 个乱数值。

ls -l files | gawk '{x += $4}; END {print "total bytes: " x}'
    此程式会印出所有指定的档案之bytes数目的总和。

expand file | gawk '{if (x < length()) x = length()}
                    END {print "maximum line length is " x}'
    此程式会将指定档案里最长一行的长度印出。expand 会将 tab 改
    成 space,所以是用实际的右边界来做长度的比较。

gawk 'BEGIN {FS = ":"}
      {print $1 | "sort"}' /etc/passwd
    此程式会将所有使用者的login名称,依照字母的顺序印出。

gawk '{nlines++}
      END {print nlines}'
    此程式会将一个档案的总行数印出。

gawk 'END {print NR}'
    此程式也会将一个档案的总行数印出,但是计算行数的工作由gawk
    来做。

gawk '{print NR,$0}'
    此程式印出档案的内容时,会在每行的最前面印出行号,它的功
    能与 'cat -n' 类似。
第十一章  结论

    gawk 对於资料的处理具有很强的功能。它能够以很短的程式完成
想要做的事,甚至一或二行的程式就能完成指定的工作。同样的一件
工作,以 gawk 程式来写会比用其它程式语言来写短很多。

    gawk 是 GNU 所做的 awk,它是公众软体(Public Domain) 可免费使
用。

--
※ 来源: 中国科大BBS站 [bbs.ustc.edu.cn]
--
※ 转载:.紫 丁 香 bbs.hit.edu.cn.[FROM: poster.hit.edu.c]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.126毫秒