gawk的使用方法( 五 )


如 body 里面包括一个以上的叙述 , 必须以大括弧 { } 将这些叙述括起
来 , 而各个叙述之间需以换行(newline)或分号隔开 。7.1 if 叙述if (condition) then-body [else else-body]
(p30 of
如果 condition 为真(true) , 则执行 then-body , 否则执行 else-body 。举一个例子如下:if (x % 2 == 0)
print "x is even"
else
print "x is odd"7.2 while 叙述while (condition)
bodywhile 叙述做的第一件事就是测试 condition 。假如 condition 为真则
执行 body 的叙述 。body 的叙述执行完後 , 会再测试 condition , 假如
condition 为真 , 则 body 会再度被执行 。这个过程会一直被重复直到
condition 不再是真 。如果 condition 第一次测试就是伪(false) , 则
body 从没有被执行 。下面的例子会印出每个输入记录(record)的前三个栏位 。gawk "{ i=1
while (i <= 3) {
print $i
i
}
}"7.3 do-while 叙述do
body
while (condition)这个 do loop 执行 body 一次 , 然後只要 condition 是真则会重复执行 body 。
(p32 of
即使开始时 condition 是伪 , body 也会被执行一次 。下面的例子会印出每个输入记录十次 。gawk "{ i= 1
do {
print $0
i
} while (i <= 10)
}"7.4 for 叙述for (initialization; condition; increment)
body此叙述开始时会执行initialization , 然後只要 condition是真 , 它
会重复执行body与做increment。下面的例子会印出每个输入记录的前三个栏位 。gawk "{ for (i=1; i<=3; i)
print $i
}"7.5 break 叙述break 叙述会跳出包含它的 for、while、do-while 回圈的最内层 。下面的例子会找出任何整数的最小除数 , 它也会判断是否为质数 。gawk "# find smallest divisor of num
{ num=$1
for (div=2; div*div <=num; div)
if (num % div == 0)
break
if (num % div == 0)
printf "Smallest divisor of %d is %d ", num, div
else
printf "%d is prime ", num }"7.6 continue 叙述
(p34 of 46)
continue 叙述使用於 for、while、do-while 回圈内部 , 它会跳
过回圈 body 的剩馀部分 , 使得它立刻进行下一次回圈的执行 。下面的例子会印出 0 至 20 的全部数字 , 但是 5 并不会被印出 。gawk "BEGIN {
for (x=0; x<=20; x) {
if (x==5)
continue
printf ("%d",x)
}
print ""
}"7.7 next 叙述、next file 叙述、exit 叙述next 叙述强迫 gawk 立刻停止处理目前的记录(record)而继续下一
个记录 。next file 叙述类似 next 。然而 , 它强迫 gawk 立刻停止处理目前
的资料档 。exit 叙述会使得 gawk 程式停止执行而跳出 。然而 , 如果 END 出现
, 它会去执行 END 的 actions 。第八章 内建函式(Built-in Functions)内建函式是 gawk 内建的函式 , 可在 gawk 程式的任何地方呼叫内建
函式 。8.1 数值方面的内建函式int(x) 求出 x 的整数部份 , 朝向 0 的方向做舍去 。例如:int(3.9)
是 3 , int(-3.9) 是 -3 。
(p36 of 46)
sqrt(x) 求出 x 正的平方根值 。例 sqrt(4)=2
exp(x) 求出 x 的次方 。例 exp(2) 即是求 e*e。
log(x) 求出 x 的自然对数 。
sin(x) 求出 x 的 sine 值 , x 是弪度量 。
cos(x) 求出 x 的 cosine 值 , x 是弪度量 。
atan2(y,x) 求 y/x 的 arctangent 值 , 所求出的值其单位是弪度量 。
rand() 得出一个乱数值 。此乱数值平均分布在 0 和 1 之间 。这个
值不会是 0 , 也不会是 1 。
每次执行 gawk , rand 开始产生数字从相同点或 seed 。
srand(x) 设定产生乱数的开始点或 seed 为 x 。如果在第二次你设
定相同的 seed 值 , 你将再度得到相同序列的乱数值 。
如果省略引数 x , 例如 srand() , 则现在的日期、时间会
被当成 seed 。这个方法可使得乱数值是真正不可预测的 。
srand 的传回值(return value)是前次所设定的 seed 值 。8.2 字串方面的内建函式index(in, find)

推荐阅读