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毫秒