变量在程序结构中是区分大小写的!是区分大小写的!是区分大小写的!
结构化命令 (条件,循环) # 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