awk

作者:王文勤
时间:2017-12-01


  1. 概述

1.1 功能描述

AWK是以行为单位对匹配模式的行进行处理的文本分析工作。

1.2 通用格式

命令行调用:

awk [options] ‘pattern {action} pattern {action}’ filename

脚本调用:

awk [options] -f script.awk filename

pattern默认情况为匹配整行内容

action的默认情况为执行’{print $0}’,如果省略print参数,则使用$0作为参数

1.3 文本文件模型
内置变量

$0 这个变量包含执行过程中当前行的文本内容

NR 行号

FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始

NF 域的个数

OFS 输出域分隔符, 默认也是空格,可以改为制表符等 #BEGIN时定义

ORS 输出记录分隔符 #BEGIN时定义

FS BEGIN时定义分隔符

RS 输入记录分隔符

FILENAME 输入文件名

  1. 参数介绍

-F fs (fs=filed separator)指定分隔符,默认的分隔符是空格或Tab键
-f scripfile (file) 从脚本文件中读取awk命令 awk -f script.awk file
-v var=value 赋值一个用户定义变量

  1. 常见pattern

3.1 正则表达式

/正则表达式/

默认使用$0来匹配

如果指定字段进行匹配需要使用~符号

3.2 关系表达式

关系运算符: < <= > >= != ==
3.3逻辑运算符
pattern && pattern
pattern || pattern
!pattern

3.4 BEGIN和END

BEGIN初始化代码块,在对每一行进行处理之前,初始化代码,只执行一次。

END结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息。

3.5 组合模式

通用格式:awk ‘BEGIN {action_begin} pattern1 {action1} pattern2 {action2} END{action_end}’

原理:第一步,执行BEGIN{ commands }语句块中的语句。

第二步:以行为单位,依次从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块。

第三步:当读至输入流末尾时,执行END{ commands }语句块。

说明:三个语句块都是可选的。如果没有pattern{commands}语句块,则默认执行{print},而当使用不带参数的print时,它就打印当前行,当print的参数是以逗号进行分隔时,打印时则以空格作为定界符。

  1. 常见场景

4.1 找出状态码非200的所有请求

4.2 日志文件中统计访问量前10的IP

4.3 统计某个IP访问量高的域名

4.4 计算大小

4.5 求均值

4.6 响应时间占比

4.7 求各用户使用的内存量

4.8 各状态码占比

  1. 踩过的坑

5.1 变量引用

1).awk内定义的变量不使用$符合

2).内置变量中的引用字段使用 1 − 1- 1n、$0

3).内置变量中FS、OFS、NR等变量不带$符合

5.2 在一个shell里,如果使用awk,如何调用shell的变量

对于awk里引用的变量需要用“‘$var’” 格式。

6,流程控制语句

6.1 条件判断语句

if(表达式)

{语句}

else if(表达式)

{语句}

else{语句}

6.2 while循环语句

while(表达式)

{语句}

6.3 for循环

for(变量 in 数组)

{语句}

或者

for(变量;条件;表达式)

{语句}

6.4 do循环

do {语句}

while(条件)

  1. 数组

在 awk 中数组叫做关联数组(associative arrays),因为下标记可以是数也可以是串。awk 中的数组不必提前声明,也不必声明大小。数组元素用 0 或空串来初始化,这根据上下文而定。

定义数组:array[index] = value 数组名array,下标index以及相应的值value。

读取数组:{ for (item in array) print array[item]}

  1. awk内置函数

system()

split()

length()

substr()

sub()

gsub()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值