awk(二)

xiaoxiao2021-02-28  118

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

转载请注明原文地址: https://www.6miu.com/read-57656.html

最新回复(0)