一、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作为脚本语言简单介绍到这里。