shell 中awk的使用方法简介

       awk这个名字起源于其三个作者( Alfred Aho,Peter Weinberger, 和 Brian Kernighan)的姓氏简称,并非有啥特定的意义。在linux系统中,通过man awk,我们可以看到对它的一句话描述为“gawk - pattern scanning and processing language”,也就是awk是一门模式匹配和处理的语言。在实际的应用中,它是一款非常高效的文本处理工具。

目录

语法介绍

参数和运算符说明

实例说明


语法介绍

awk [选项参数] ‘script’  var=value file(s)

或者

awk [选项参数]  -f scriptfile  var=value file(s)

其中,第一个语法命令是面向命令行的模式,即所有的脚步操作命令都写在当前行中。 第二个语法命令是面向文本模式的,它会从文本中读取命令并进行执行。

 

参数和运算符说明

-F    分隔符号,用于指定分隔输入行的分隔符号。如果只是单个分隔符,只需要单引号引入即可。比如-F ',',如果有多个分隔符             号,则需要用中括号包含多个分隔符,比如 -F'[,.]'。

-v    定义一个变量。如果要定义多个变量,则需要分别引入该参数。 比如: awk -va=1 -vb=2

-f     读取awk命令文件。

 $    字段引用,用于读取指定列的值。

$0   匹配的整行内容

$i     指定i列的值

NF   一行记录分隔的列数

NR   行号

OFS    输出分隔符号

BEGIN{执行循环之前的命令}/{挨行执行的命令}/END{执行循环之后的命令},关于这个命令详情可参考AWK工作原理

实例说明

下面分别列举几个awk命令的案例

如果我们有一个nginx日志,列之间以tab进行分隔,第一列是日期时间,第二列是报错信息,包括:INFO、ERROR、WARNING等,第三列是http状态码,第四列为超时时间,第五列为ref。格式如下:

[2018-11-30 11:10:10]   ERROR   500 0.023   http://www.csdn.net
[2018-11-30 11:20:11]   INFO    200 0.013   http://www.baidu.com
[2018-11-30 11:40:12]   ERROR   500 0.033   http://www.163.com
[2018-11-30 11:50:13]   INFO    200 0.021   http://www.baidu.com
[2018-11-30 12:00:14]   ERROR   500 0.023   http://www.baidu.com
[2018-11-30 12:10:15]   ERROR   500 0.013   http://www.sina.com
[2018-11-30 12:50:16]   WARNING 200 0.033   http://www.baidu.com
[2018-11-30 13:10:17]   ERROR   500 0.023   http://www.baidu.com
[2018-11-30 13:20:18]   INFO    200 0.013   http://www.sina.com
[2018-11-30 13:55:19]   ERROR   500 0.033   http://www.google.com

1.尝试统计每个小时的请求量

awk -F '[\t:]' '{sum[$1]+=1}END{for(i in sum){print i" : "sum[i]}}' log.txt

输出为

[2018-11-30 13 : 3
[2018-11-30 11 : 4
[2018-11-30 12 : 3

2.取出所有报错信息为ERROR的行的ref及其出现次数

awk -F '\t' '{if($2=="ERROR"){sum[$5]+=1}}END{for(i in sum){print i" : "sum[i]}}' log.txt
http://www.google.com : 1
http://www.sina.com : 1
http://www.baidu.com : 2
http://www.csdn.net : 1
http://www.163.com : 1

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值