1 插入新字符以及格式化空白
将’a b c d’中的b字符,替换成’e f g’
直接进行替换,在awk中,每次替换之后,会对之前的分隔符(OFS)进行重置。
格式化以下数据
1
2
3aaa bbbbb cc
ddd eee ffff
hhh iii jj kk l方法一:按空格进行分隔
方法二:按制表符进行分隔
2 提取ipv4地址
提取ifconfig命令中的除了lo网卡之外的所有的ipv4地址
1
ifconfig | awk 'BEGIN{RS=""} !/^lo/ {print $6}'
使用正则表达式匹配日志文件中的所有IP地址
在使用awk的正则表达式的时候,需要指定适应该模块,
--re-interval
后续还可以进行排序与去重
1
2awk --re-interval '{match($0,/([0-9]{1,3}\.){3}[0-9]{1,3}/,a); print a[0]}' debug.log
awk --re-interval '{match($0,/([0-9]{1,3}\.){3}[0-9]{1,3}/,a); print a[0]}' debug.log | sort | uniq -c
3 使用awk数组做次数统计
统计
netstat -tnap
中建立连接的次数1
netstat -tnap | awk '{arr[$6]++}END {for (i in arr){print arr[i], i} }'
如果只想统计TCP连接的,可以进行过滤:
1
netstat -tnap | awk '/^tcp/ {arr[$6]++}END {for (i in arr){print arr[i], i} }'
统计日志中的IP地址数量并降序排序
通过管道,发送到外部程序
sort
排序,-r
从大到小,-n
按照数字排序,-k2
以第2列排序。通过将数据丢给第3方的sort
命令,所有问题变得非常简单。如果以key值排序–k2
变成-k1
即可。1
awk '{arr[$4]++}END{for (i in arr){print i, arr[i]}}' log.2021073010-20210730
1
2awk '{arr[$4]++}END{for (i in arr){print i, arr[i] | "sort -r -n -k2"}}' log.2021073010-20210730
awk '{arr[$4]++}END{for (i in arr){print i, arr[i] | "sort -r -n -k2"}}' log.2021073010-20210730 | head -10 #取数量最多的前10个
Reference
写在最后
欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment