Linux Shell 编程之gawk详解(3)

变量在程序结构中是区分大小写的!是区分大小写的!是区分大小写的!

结构化命令 (条件,循环) if  条件: if (condition)
 statement
# while 循环 while (condition)
{
    statements
}
do   while  循环
do {
    statements
}
while (condition)
# for 循环  # c语言风格 for (i=1;i<4;i++)
{
    total +=  $i }
# python 式 for ( prize  in  Prize)
{
  print  Prize[prize]
}

已知每行字段总数可以用内建变量 NF 标识,据此可以打印出每个字段的值:

[root@centos00 _data] # cat testData.txt 123   345   567   789 111   222   333   444 333   555   666   777 [root@centos00 _data] # gawk '{for(i=1;i<=NF;i++){ print $i } }' testData.txt 123 345 567 789 111 222 333 444 333 555 666 777 [root@centos00 _data] # 操作函数

跟变量一样,可分“内建函数”和“自定义函数”

内建函数参考文档即可,不需要太多的解释。

我们该关心的还是自定义函数。

自定义函数的格式

[root@centos00 _data]# gawk '
>   function  getRand(myRand) >  { >   print  myRand*rand() >  } >  BEGIN{ >   print  getRand(4) >  } ' 0.95115
[root@centos00 _data]#

所有的自定义函数一定是放在 BEGIN 之前,或者说程序的开头。

但马上就会有问题的是,函数必须重用。重复发明不必要的轮子,是低效的。因此 gawk 给出了函数库这个概念。

将所有的自定义函数归档到函数库中,在使用个别函数时候,只要引用这个库就可以了。相信 Java 朋友不陌生,Python 朋友简直是秒懂,就是库引用嘛!

[root@centos00 _data] # cat funclib.awk function myprint()
{
    printf   "%-16s - %s\n" , $1, $4
}
function getRand(myRand)
{
    print  myRand* rand ()
}
[root@centos00 _data] # cat rand.awk BEGIN{FS= ":" }
{
    getRand(NF)
}
[root@centos00 _data] # gawk -f funclib.awk -f rand.awk /etc/passwd 1.66451 2.03746 5.9207 1.06546

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6b6bc32df5129eccad626573bf4af975.html