文章目录

正则匹配

  • //支持扩展正则
  • awk可以精确到某一列,某一列中包含/不包含…内容
  • ~包含,!~不包含

正则

awk正则

写法

^表示以…开头的行

某一列的开头

$3~/^oldboy/

$表示以…结尾的行

某一列的结尾

$4~/lidao$/

^$表示空行

某一列是空的 (少用)

^$

  • 第三列以1开头的
awk -F: '$3~/^1/'

Linux三剑客awk模式匹配_读取文件

  • 第三列以2开头的,并打印1、3和最后一列
awk -F: '$3~/^2/{print $1, $3, $NF}'

Linux三剑客awk模式匹配_服务器_02

  • 第三列以1或2开头的,并打印1、3和最后一列
awk -F: '$3~/^[12]/{print $1, $3, $NF}' /etc/passwd | column

Linux三剑客awk模式匹配_运维_03

范围匹配

写法

含义

/sss/,/eee/

从sss开始,到eee结束(多用)

NR==1,NR==5

从第一行开始到第5行结束,类似于​​sed -n '1,5p'​​(少用)

  • 找出日志access.log中从11:02:00到11:02:30的ip地址、用户访问的URI、状态码、数据包大小

Linux三剑客awk模式匹配_服务器_04

awk '/11:02:00/,/11:02:30/{print $1,$7,$9,$10}'

特殊模式BEGIN{}和END{}

模式

含义

应用场景

BEGIN{}

里面的语句会在awk读取文件前执行

1)进行简单统计计算,不涉及读取文件(常见)

2)处理文件前,添加表头(少用)

3)用来定义awk变量(少用),因为可以用-v

END{}

里面的语句会在awk读取文件后执行

1)awk进行统计,一般过程:先进行计算,最后END里面输出结果(常见)

2)awk使用数组,用于输出数组结果(常见)

END{}统计方法

统计方法

简写形式

功能

i=i+1

i++

计数,统计次数

sum=sum+???

sum += ???

求和

awk 'BEGIN{i=0}/^$/{i++}END{print i}'

Linux三剑客awk模式匹配_服务器_05

使用awk求和

seq 100 | awk 'BEGIN{sum=0}{sum += $1}END{print sum}'
seq 100 | awk 'BEGIN{sum=0}{sum+=$1; print sum;}END{print sum}' # 写语句时可以用分号隔开

Linux三剑客awk模式匹配_linux_06