shell 中awk的使用方法简介

原文链接: https://blog.csdn.net/newchitu/article/details/83716094

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
 
————————————————
版权声明:本文为CSDN博主「adu_ustc」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/newchitu/article/details/83716094

猜你喜欢

转载自blog.csdn.net/changdizm/article/details/102771469