文章目录
前言
对于接触过Linux操作系统的人来说,应该都听过说Linux中的文本三剑客吧,即awk、grep、sed,也是必须要掌握的Linux命令之一,awk功能最强大,但也最复杂🚀 1.awk介绍
🌈 1.1 什么是AWK
🌈 1.2 AWK 的工作流程
🚀 2.awk实战案例
🌈 2.1 格式化空白
🚩 移除每行的前缀、后缀空白,并将各部分左对齐。
aaaa bbb ccc
bbb aaa ccc
ddd fff eee gg hh ii jj
✨✨ 执行结果:
aaaa bbb ccc
bbb aaa ccc
ddd fff eee gg hh ii jj
🌈 2.2 根据某字段去重
🚩 去掉uid=xxx重复的行。
2022-01-13_12:00_index?uid=123
2022-01-13_13:00_index?uid=123
2022-01-13_14:00_index?uid=333
2022-01-13_15:00_index?uid=9710
2022-01-14_12:00_index?uid=123
2022-01-14_13:00_index?uid=123
2022-01-15_14:00_index?uid=333
2022-01-16_15:00_index?uid=9710
✨✨ 执行结果
2022-01-13_12:00_index?uid=123
2022-01-13_14:00_index?uid=333
2022-01-13_15:00_index?uid=9710
🌈 2.3 统计次数
🚩 统计文本中出现的次数
portmapper
portmapper
portmapper
portmapper
portmapper
portmapper
status
status
mountd
mountd
mountd
mountd
mountd
mountd
✨✨ 执行结果
6: portmapper
2: status
6: mountd
🌈 2.4 行转列
🚩 将以下文本行转列
name age
alice 21
ryan 30
✨✨ 执行结果
name alice ryan
age 21 30
🌈 2.5 列转行
🚩 就是只要第一列数字相同, 就把他们的第二列放一行上,中间空格分开
74683 1001
74683 1002
74683 1011
74684 1000
74684 1001
74684 1002
74685 1001
74685 1011
74686 1000
....
100085 1000
100085 1001
✨✨ 执行结果
74683 1001 1002 1011
74684 1000 1001 1002
...
🌈 2.6 统计多项数据
🚩如下内容,第一个字段是IP,第二个字段是每个访问的uri。
要求统计出每个ip访问的总次数,以及每个ip所访问的uri的次数。
1.1.1.1 /index1.html
1.1.1.1 /index1.html
1.1.1.1 /index2.html
1.1.1.1 /index2.html
1.1.1.1 /index2.html
1.1.1.1 /index3.html
1.1.1.2 /index1.html
1.1.1.2 /index2.html
1.1.1.2 /index2.html
1.1.1.3 /index1.html
1.1.1.3 /index1.html
1.1.1.3 /index2.html
1.1.1.3 /index2.html
1.1.1.3 /index2.html
1.1.1.3 /index3.html
1.1.1.3 /index3.html
1.1.1.4 /index2.html
1.1.1.4 /index2.html
使用复合索引的数组
✨✨ 执行结果
1.1.1.1 6 /index3.html 1
1.1.1.1 6 /index2.html 3
1.1.1.1 6 /index1.html 2
1.1.1.2 3 /index2.html 2
1.1.1.2 3 /index1.html 1
1.1.1.3 7 /index3.html 2
1.1.1.3 7 /index2.html 3
1.1.1.3 7 /index1.html 2
1.1.1.4 2 /index2.html 2
🚀 3.awk常用命令
🌈 3.1 awk查看某个时间段的日志
awk ‘/^开始时间日期/,/^结束时间日期/’ nginx.log
awk支持正则表达式,比如,查询时间段2021-03-24 10:12:12 到 2021-09-24 10:12:12,
可以用awk ‘/^2021-03-24 10:12:*/,/^2021-09-24 10:12:*/’ nginx.log查询。
🌈 3.2 统计命令
# 求和
cat data|awk '{sum+=$1} END {print "Sum = ", sum}'
# 求平均
cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}'
# 求最大值
cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'
# 求最小值(min的初始值设置一个超大数即可)
awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'