awk经典案例

文章序列

  • 介绍
      • 模式pattern
      • 操作action
  • awk 编程
      • awk 18案例经典案例

介绍

awk是linux及unix操作系统中非常优秀的数据及文本处理工具,它是一种编程语言
awk命令格式为:

awk pattern {action} filename

相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分成数个字段来处理。awk将输入数据视为一个文本数据库,像数据库一样,它也有记录和字段的概念。默认情况下,记录的分隔符是回车,字段的分隔符是空白符(空格,\t),所以输入数据的每一行表示一个记录,而每一行中的内容被空白分隔成多个字段。利用字段和记录,awk可以非常灵活地处理文件

测试文件

[root@gd-mm-sso-23 ~]$ last -5 | head -5 > tmp
cat tmp
suncheng pts/3        106.121.73.203   Thu Oct 25 12:34 - 12:49  (00:15)    
suncheng pts/2        106.121.73.203   Thu Oct 25 12:33   still logged in   
suncheng pts/2        106.121.73.203   Thu Oct 25 12:33 - 12:33  (00:00)    
suncheng pts/1        210.13.54.234    Thu Oct 25 11:02   still logged in   
suncheng pts/0        210.13.54.234    Thu Oct 25 10:27   still logged in

别名设置了默认的分隔符是\t

awk脚本是由模式和操作组成的
两者是可选的,如果没有pattern,则action应用到全部记录,如果没有action,则输出匹配全部记录

awk {action} filename

[root@VM_0_15_centos awk]# cat tmp | awk '{print $3}'
106.121.73.203
106.121.73.203
106.121.73.203
210.13.54.234
210.13.54.234

  • awk pattern {action} filename
[root@VM_0_15_centos awk]# awk -F' ' '$3 ~ /^1/ {print $3}' tmp
106.121.73.203
106.121.73.203
106.121.73.203
[root@VM_0_15_centos awk]#  awk -F' ' '$3=="210.13.54.234" {print $3}' tmp
210.13.54.234
210.13.54.234
[root@VM_0_15_centos awk]# awk -F' ' '/in/ {print $0}' tmp
suncheng pts/2        106.121.73.203   Thu Oct 25 12:33   still logged in   
suncheng pts/1        210.13.54.234    Thu Oct 25 11:02   still logged in   
suncheng pts/0        210.13.54.234    Thu Oct 25 10:27   still logged in

模式pattern

模式可以是以下任意一个:

  • /正则表达式/:使用通配符的扩展集。

awk -F’ ’ ‘/in/ {print $0}’ tmp

  • 关系表达式:可以用下面运算符表中的关系运算符进行操作,可以是字符串或数字的比较,如$2>%1选择第二个字段比第一个字段长的行。

awk -F’ ’ ‘$3==“210.13.54.234” {print $3}’ tmp

  • 模式匹配表达式:用运算符(匹配)和!(不匹配)。

awk -F’ ’ ‘$3 ~ /^1/ {print $3}’ tmp

  • 模式,模式:指定一个行的范围。该语法不能包括BEGIN和END模式。
  • BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。
  • END:让用户在最后一条输入记录被读取之后发生的动作。

操作action

操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要有四个部分:

  • 变量或数组赋值
  • 输出命令
  • 内置函数
  • 控制流命令

awk 编程

  • 典型的awk语法如下:
awk '{ 

     BEGIN{stat1} 
     BEGIN{stat2} 
     pattern1{action1} 
     pattern2{action2} 
     ... 
     patternn{actionn} 
     {默认动作,无条件,始终执行} 

     END{stat1} 
     END{stat2} 
}'

awk 18案例经典案例

awk18经典案例

你可能感兴趣的:(shell,服务器,运维)