Linux命令查找出日志文件中访问量最大的ip
面试很多公司都会问linux相关的问题,最近遇到一些问linux的文件相关的,发现日志统计问的比较多由此自己研究了一下。
比如有一个日志文件,需要统计访问量最大的ip,该怎么处理?
1.首先准备好需要的日志文件,这里是采用的python3 生成的日志文件,生成数据过多,可以根据实际需求修改
# -*- coding: utf-8 -*-
import datetime
import random
import time
row = 0
with open("biglog","a+") as f:
for i in range(10000000):
for j in range(10000000):
for k in range(10000000):
ip1 = random.Random().randint(0,255)
ip2 = random.Random().randint(0,255)
ip3 = random.Random().randint(0,255)
ip4 = random.Random().randint(0,255)
row+=1
times = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
f.write(f" {row} - {times} {ip1}.{ip2}.{ip3}.{ip4} \n")
print (row)
2.输入命令
cat biglog | awk -F " " '{print $5}'|sort|uniq -c|sort -nrt " "| head -10
每一步命令解释:
cat biglog将biglog文件内容输出到终端
|通过管道符|将左边命令输出作为右边命令输入(后面|功能类似)
awk -F" " ‘{print $2}’
-F 指定输入文件折分隔符 -F" ": 以空格分隔
{print $5} 分隔后每一行就分成了时间戳和ip两个单元$1指时间$5指ip print $5 即输出ip
sort 对输出ip进行排序
uniq -c 检查及删除文本文件中重复出现的行列 -c或–count 在每列旁边显示该行重复出现的次数。
此时输出的数据格式为 出现次数 ip
sort -nrt " " 对输出结果排序 -n : 依照数值的大小排序 -r : 以相反的顺序来排序 -t : <分隔字符> 指定排序时所用的栏位分隔字符
接着继续用awk 将数据第二列ip输出
head -10 取前十条数据
命令执行结果:

浙公网安备 33010602011771号