📄 00000007.htm
字号:
的资料档。 <BR> <BR> exit 叙述会使得 gawk 程式停止执行而跳出。然而,如果 END 出现 <BR>,它会去执行 END 的 actions。 <BR> <BR> <BR> <BR>第八章 内建函式(Built-in Functions) <BR> <BR> 内建函式是 gawk 内建的函式,可在 gawk 程式的任何地方呼叫内建 <BR>函式。 <BR> <BR> <BR> <BR> 8.1 数值方面的内建函式 <BR> <BR>int(x) 求出 x 的整数部份,朝向 0 的方向做舍去。例如:int(3.9) <BR> 是 3,int(-3.9) 是 -3。 <BR>sqrt(x) 求出 x 正的平方根值。例 sqrt(4)=2 <BR>exp(x) 求出 x 的次方。例 exp(2) 即是求 e*e 。 <BR>log(x) 求出 x 的自然对数。 <BR>sin(x) 求出 x 的 sine 值,x 是弪度量。 <BR>cos(x) 求出 x 的 cosine 值,x 是弪度量。 <BR>atan2(y,x) 求 y/x 的 arctangent 值,所求出的值其单位是弪度量。 <BR>rand() 得出一个乱数值。此乱数值平均分布在 0 和 1 之间。这个 <BR> 值不会是 0,也不会是 1。 <BR> 每次执行 gawk,rand 开始产生数字从相同点或 seed。 <BR>srand(x) 设定产生乱数的开始点或 seed 为 x。如果在第二次你设 <BR> 定相同的 seed 值,你将再度得到相同序列的乱数值。 <BR> 如果省略引数 x,例如 srand(),则现在的日期、时间会 <BR> 被当成 seed。这个方法可使得乱数值是真正不可预测的。 <BR> srand 的传回值(return value)是前次所设定的 seed 值。 <BR> <BR> <BR> <BR> 8.2 字串方面的内建函式 <BR> <BR>index(in, find) <BR> 它会在字串 in 里面,寻找字串 find 第一次出现的地方,传回值是 <BR> 字串 find 出现在字串 in 里面的位置。如果在字串 in 里面找不到字 <BR> 串 find,则传回值为 0。 <BR> 例如: <BR> print index("peanut","an") <BR> 会印出 3。 <BR> <BR>length(string) <BR> 求出 string 有几个字元。 <BR> 例如: <BR> length("abcde") <BR> 是 5。 <BR> <BR>match(string,regexp) <BR> match 函式会在字串 string 里面,寻找符合 regexp 的最长、最靠 <BR> 左边的子字串。传回值是 regexp 在 string 的开始位置,即 index <BR> 值。 <BR> match 函式会设定内在变数 RSTART 等於 index,它也会设定内在变 <BR> 数 RLENGTH 等於符合的字元个数。如果不符合,则会设定 RSTART 为 <BR> 0、RLENGTH 为 -1。 <BR> <BR>sprintf(format,expression1,...) <BR> 举 printf 类似,但是 sprintf 并不印出,而是传回字串。 <BR> 例如: <BR> sprintf("pi = %.2f (approx.)',22/7) <BR> 传回的字串为"pi = 3.14 (approx.)" <BR> <BR>sub(regexp, replacement,target) <BR> 在字串 target 里面,寻找符合 regexp 的最长、最靠左边的地方, <BR> 以字串 replacement 代替最左边的 regexp。 <BR> 例如: <BR> str = "water, water, everywhere" <BR> sub(/at/, "ith",str) <BR> 结果字串str会变成 <BR> "wither, water, everywhere" <BR> <BR>gsub(regexp, replacement, target) <BR> gsub 与前面的 sub 类似。在字串 target 里面,寻找符合 regexp 的 <BR> 所有地方,以字串 replacement 代替所有的 regexp。 <BR> 例如: <BR> str="water, water, everywhere" <BR> gsub(/at/, "ith",str) <BR> 结果字串str会变成 <BR> 'wither, wither, everywhere" <BR> <BR>substr(string, start, length) <BR> 传回字串 string 的子字串,这个子字串的长度为 length 个字元, <BR> 从第 start 个位置开始。 <BR> 例如: <BR> substr("washington",5,3) <BR> 传回值为"ing" <BR> 如果 length 没有出现,则传回的子字串是从第 start 个位置开始 <BR> 至结束。 <BR> 例如: <BR> substr("washington",5) <BR> 传回值为"ington" <BR> <BR>tolower(string) <BR> 将字串string的大写字母改为小写字母。 <BR> 例如: <BR> tolower("MiXeD cAsE 123") <BR> 传回值为"mixed case 123" <BR> <BR>toupper(string) <BR> 将字串string的小写字母改为大写字母。 <BR> 例如: <BR> toupper("MiXeD cAsE 123") <BR> 传回值为"MIXED CASE 123" <BR> <BR> <BR> <BR> 8.3 输入输出的内建函式 <BR> <BR>close(filename) <BR> 将输入或输出的档案 filename 关闭。 <BR> <BR>system(command) <BR> 此函式允许使用者执行作业系统的指令,执行完毕後将回到 gawk <BR> 程式。 <BR> 例如: <BR> BEGIN {system("ls")} <BR> <BR> <BR> <BR>第九章 使用者定义的函式(User-defined Functions) <BR> <BR> 复杂的 gawk 程式常常可以使用自己定义的函式来简化。呼叫使用 <BR>者定义的函式与呼叫内建函式的方法一样。 <BR> <BR> <BR> <BR> 9.1 函式定义的格式 <BR> <BR> 函式的定义可以放在 gawk 程式的任何地方。 <BR> <BR> 一个使用者定义的函式其格式如下: <BR> <BR> function name (parameter-list) { <BR> body-of-function <BR> } <BR> <BR>name 是所定义的函式之名称。一个正确的函式名称可包括一序列的字 <BR>母、数字、下标线 (underscores),但是不可用数字做开头。 <BR> <BR> parameter-list 是列出函式的全部引数(argument),各个引数之 <BR>间以逗点隔开。 <BR> <BR> body-of-function 包含 gawk 的叙述 (statement)。它是函式定义 <BR>里最重要的部份,它决定函式实际要做何种事。 <BR> <BR> <BR> <BR> 9.2 函式定义的例子 <BR> <BR> 下面这个例子,会将每个记录的第一个栏位之值的平方与第二个 <BR>栏位之值的平方加起来。 <BR> <BR>{print "sum =",SquareSum($1,$2)} <BR>function SquareSum(x,y) { <BR> sum=x*x+y*y <BR> return sum <BR>} <BR> <BR> <BR> <BR>第十章 □例 <BR> <BR> 这里将列出 gawk 程式的一些例子。 <BR> <BR>gawk '{if (NF > max) max = NF} <BR> END {print max}' <BR> 此程式会印出所有输入行之中,栏位的最大个数。 <BR> <BR>gawk 'length($0) > 80' <BR> 此程式会印出一行超过 80 个字元的每一行。此处只有 pattern 被 <BR> 列出,action 是采用内定的 print。 <BR> <BR>gawk 'NF > 0' <BR> 对於拥有至少一个栏位的所有行,此程式皆会印出。这是一个简 <BR> 单的方法,将一个档案里的所有空白行删除。 <BR> <BR>gawk '{if (NF > 0) print}' <BR> 对於拥有至少一个栏位的所有行,此程式皆会印出。这是一个简 <BR> 单的方法,将一个档案里的所有空白行删除。 <BR> <BR>gawk 'BEGIN {for (i = 1; i <= 7; i++) <BR> print int(101 * rand())}' <BR> 此程式会印出□围是 0 到 100 之间的 7 个乱数值。 <BR> <BR>ls -l files | gawk '{x += $4}; END {print "total bytes: " x}' <BR> 此程式会印出所有指定的档案之bytes数目的总和。 <BR> <BR>expand file | gawk '{if (x < length()) x = length()} <BR> END {print "maximum line length is " x}' <BR> 此程式会将指定档案里最长一行的长度印出。expand 会将 tab 改 <BR> 成 space,所以是用实际的右边界来做长度的比较。 <BR> <BR>gawk 'BEGIN {FS = ":"} <BR> {print $1 | "sort"}' /etc/passwd <BR> 此程式会将所有使用者的login名称,依照字母的顺序印出。 <BR> <BR>gawk '{nlines++} <BR> END {print nlines}' <BR> 此程式会将一个档案的总行数印出。 <BR> <BR>gawk 'END {print NR}' <BR> 此程式也会将一个档案的总行数印出,但是计算行数的工作由gawk <BR> 来做。 <BR> <BR>gawk '{print NR,$0}' <BR> 此程式印出档案的内容时,会在每行的最前面印出行号,它的功 <BR> 能与 'cat -n' 类似。 <BR> <BR> <BR> <BR>第十一章 结论 <BR> <BR> gawk 对於资料的处理具有很强的功能。它能够以很短的程式完成 <BR>想要做的事,甚至一或二行的程式就能完成指定的工作。同样的一件 <BR>工作,以 gawk 程式来写会比用其它程式语言来写短很多。 <BR> <BR> gawk 是 GNU 所做的 awk,它是公众软体(Public Domain) 可免费使 <BR>用。 <BR> <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -