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 取前十条数据
命令执行结果:

 

posted @ 2021-06-09 14:52  老鲜肉  阅读(1026)  评论(0)    收藏  举报