Linux awk统计日志中出现过的IP(或出现次数最多的N个IP)

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk的用法

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

第一步:运行BEGIN{ commands }语句块中的语句。

第二步:从文件或标准输入(stdin)读取一行。然后运行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行反复这个过程。直到文件所有被读取完成。

第三步:当读至输入流末尾时,运行END{ commands }语句块。

BEGIN语句块在awk開始从输入流中读取行之前被运行,这是一个可选的语句块,比方变量初始化、打印输出表格的表头等语句通常能够写在BEGIN语句块中。

END语句块在awk从输入流中读取全然部的行之后即被运行。比方打印全部行的分析结果这类信息汇总都是在END语句块中完毕,它也是一个可选语句块。

pattern语句块中的通用命令是最重要的部分,它也是可选的。假设没有提供pattern语句块,则默认运行{ print },即打印每个读取到的行。awk读取的每一行都会运行该语句块。

这三个部分缺少任何一部分都可以。

可用awk来统计固定格式日志里的一些数据,如日志中出现过所有不同的IP

awk ‘{i=$1;count[i]++}END{for(i in count)print(i,count[i])}’ /var/log/httpd/access_log

awk对文件进行流处理,每次读取一行。$1就是IP,count[i]++是将IP作为一个数组的下标,并且使得统计这个IP所对应的数组元素自增1.END后面的语句是打印结果,只执行一次。

也可以用来找出访问

### Linux统计访问次数最多IP地址方法 在Linux中,可以通过组合多个命令来实现统计访问次数最多IP地址的功能。以下是具体的方法: 通过`grep`提取日志中的IP地址部分,并利用`sort`、`uniq`以及`head`等命令完成统计和筛选工作。 #### 方法一:基于日志文件的IP统计 对于常见的Web服务器日志文件(如Apache的日志),可以使用以下命令统计访问次数最多的前10个IP地址: ```bash grep -E -o "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log | sort | uniq -c | sort -nr | head -10 ``` 此命令的作用如下: - `grep -E -o "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log` 提取日志文件中的所有IPv4地址[^1]。 - `sort` 将提取出的IP地址按字母顺序排列以便后续去重操作。 - `uniq -c` 对连续相同的IP地址进行计数并显示其出现次数。 - `sort -nr` 按照出现次数降序排列。 - `head -10` 输出排名靠前的10个IP地址及其对应的访问次数。 #### 方法二:针对特定格式的日志文件 如果日志文件是以空格分隔且首列为客户端IP,则可采用更简洁的方式: ```bash cut -d ' ' -f 1 access.log | sort | uniq -c | sort -nr | head -10 ``` 这里的关键在于`cut -d ' ' -f 1`,它会截取每一行的第一个字段作为IP地址[^1]。 #### 方法三:统计网络连接中最活跃的IP地址 除了分析日志外,还可以直接监控当前活动连接情况下的高频IP。例如,要找出建立TCP连接数量最多的三个远程主机IP,可以用下面这条指令: ```bash ss -tnl | awk '{print $5}' | cut -d: -f1 | grep -v '^$' | sort | uniq -c | sort -nr | head -3 ``` 解释各部分功能: - `ss -tnl` 展示所有的监听状态(TCP)端口信息。 - `awk '{print $5}'` 获取第五列数据即源地址部分。 - `cut -d: -f1` 进一步分离出纯IP成分去除端口号影响。 - 后续流程与前面提到的大致一致,最终选出最频繁通信伙伴列表长度限定为三项[^2]。 以上三种方式分别适用于不同场景需求,在实际应用过程中可根据具体情况调整参数设置者选用其他适合自己的工具链来进行更加精确细致的数据挖掘处理过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值