awk(二)

一、awk的特殊模式

awk的完整语法
awk [选项] 'BEGIN{动作}定址{动作}END{动作}' 文件列表
BEGIN{}  : 在读取文件之前就执行,只执行一次;一般用于初始化分隔符、初始化变量、定义数组、打印表头等
定址{}    : 这一部分可能会执行多次
END{}    : 在处理完文本之后执行,只执行一次;一般用于汇总数据  比如:打印总成绩、平均成绩等等

说明:
BEGIN和END可以单独存在的
1)只有BEGIN,后面不需要加文件
[root@bogon ~]# awk 'BEGIN{print "hello"}'
hello
2)只有END,后面必须加文件,文件可以是空文件,也可以是有内容的文件
[root@bogon ~]# awk 'END{print "end"}' pass.txt 
end
3)没有BEGIN,也没有END
[root@bogon ~]# awk '{sum=0;sum+=$3;print $1,$3,sum}' test.txt 
Tom 2340 2340
Mary 3340 3340
Sally 4500 4500
Billy 5500 5500
Tom 6500 6500
4)有BEGIN,没有END‘
[root@bogon ~]# awk 'BEGIN{sum=0}{sum+=$3;print $1,$3,sum}' test.txt 
Tom 2340 2340
Mary 3340 5680
Sally 4500 10180
Billy 5500 15680
Tom 6500 22180
5)既有BEGIN,又有END
[root@bogon ~]# awk 'BEGIN{sum=0}{sum+=$3;print $1,$3}END{print "total:"sum}' test.txt 
Tom 2340
Mary 3340
Sally 4500
Billy 5500
Tom 6500
total:22180

二、awk的脚本

BEGIN{
命令    
}
定址{  
命令
}
END{
命令
}

1、分支判断结构 if

语法格式:
if(条件表达式)      ——  注意:如果if是写在awk的脚本中,那么他的整体都要写在{}中,因为它属于动作
{
 动作    
}
else
{
动作        
}

2、多分支判断语法结构

if(条件表达式)
{
动作        
}
else if(条件表达式)
{
动作        
}
... ...
else
{
动作        
}
[root@bogon ~]# cat score 
mike 70
rose 99
john 85
jake 55
[root@bogon ~]# cat test1.awk 
#!/usr/bin/awk -f    //指定文件中的命令的解析环境是awk
NR>0{
if($2>=90)
{
  print $1": A"
}
else if($2>=80)
{
  print $1": B"
}
else 
{
  print $1": C"
}
}
[root@bogon ~]# ./test1.awk score 
mike: C
rose: A
john: B
jake: C

3、循环

功能:
从行中取出每个字段,循环字段的
遍历数组元素

1)、while循环
 语法:
变量初始值
while (条件)
{
动作
变量的更新            
}   

2)、for循环
语法:
for(变量初始值;判断条件;变量的更新)
{
动作            
}

个人感觉awk作为一个工具比较好用,所以awk作为脚本语言简单介绍到这里。

猜你喜欢

转载自blog.csdn.net/weini1111/article/details/72903291
awk