3

awk的用法

 1 year ago
source link: https://bajie.dev/posts/20221019-systemctl/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Awk的用法

2022-09-25 1 分钟阅读

awk 是比较强力的工具,跟cut和sed组合起来,会有意想不到的作用

举个简单例子,我们nginx的access.log如下:

110.244.232.88 - - [12/Apr/2022:16:50:06 +0800] help.jjwxc.net "GET /user/article/248 HTTP/1.1" 200 10616 "http://my.jjwxc.net/"
220.244.232.88 - - [12/Apr/2022:16:50:06 +0800] help.jjwxc.net "GET /user/article/248 HTTP/1.1" 200 20616 "http://my.jjwxc.net/"
330.244.232.88 - - [12/Apr/2022:16:50:06 +0800] help.jjwxc.net "GET /user/article/248 HTTP/1.1" 200 30616 "http://my.jjwxc.net/"
410.244.232.88 - - [12/Apr/2022:16:50:06 +0800] help.jjwxc.net "GET /user/article/248 HTTP/1.1" 200 10616 "http://my.jjwxc.net/"
530.244.232.88 - - [12/Apr/2022:16:50:06 +0800] help.jjwxc.net "GET /user/article/248 HTTP/1.1" 200 10616 "http://my.jjwxc.net/"
650.244.232.88 - - [12/Apr/2022:16:50:06 +0800] help.jjwxc.net "GET /user/article/248 HTTP/1.1" 200 50616 "http://my.jjwxc.net/"
760.244.232.88 - - [12/Apr/2022:16:50:06 +0800] help.jjwxc.net "GET /user/article/248 HTTP/1.1" 200 60616 "http://my.jjwxc.net/"
fallback

第一个字段是ip,然后倒数第3个是200,表示200 OK,后面的就是传输了多少数据两给客户端 我们要统计一下流量大的前5名是谁。

思路如下: 我们需要造一个数组,然后数组的键值就是ip,然后值就是数据量,如果ip重复,那么就累加数据

cat access.log |  awk -F\" '{print $1 $3}'|cut -d' ' -f 1,9|sort -nrk 2| awk '{ip[$1] +=$2}END{for (i in ip) {print i, ip[i]}}' | sed -n '1,5p'
fallback

最后结果:

160.244.232.88 60616
220.244.232.88 20616
330.244.232.88 41232
450.244.232.88 50616
510.244.232.88 21232
fallback

注意 10.244.232.88 和 30.244.232.88 后面的数据都是累加过的。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK