0
点赞
收藏
分享

微信扫一扫

20分钟降服Linux三剑客老大awk,让人拍案叫绝

_LEON_ 2022-05-02 阅读 145

文章目录

前言

对于接触过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}'

🌈 3.3 awk 内置变量表

在这里插入图片描述

🌈 3.5 awk 字符串函数

在这里插入图片描述

🌈 3.6 其他

举报

相关推荐

0 条评论