首页 > 解决方案 > 我如何计算出现次数

问题描述

我需要根据日志文件中的 %LINK-3-UPDOWN 创建前 5 个向上/向下的接口。并且还需要根据 %SEC-6-IPACCESSLOGDP 的数量计算停止的 ICMP 数据包数量。日志文件如下所示:

9 月 22 日 15:12:09 145.89.109.1:%SEC-6-IPACCESSLOGP:列表 120 拒绝 tcp 80.82.77.33(0) -> 145.89.109.49(0),1 个数据包
9 月 22 日 16:11:15 145.89.109.11 28w6d:%LINK-3-UPDOWN:接口 GigabitEthernet1/20,将状态更改为向上
9 月 22 日 16:11:15 145.89.109.11 28w6d:%LINEPROTO-5-UPDOWN:接口 GigabitEthernet1/20 上的线路协议,将状态更改为向上
9 月 22 日 15:16:09 145.89.109.1:%SEC-6-IPACCESSLOGP:列表 120 拒绝 tcp 216.158.238.186(0) -> 145.89.109.49(0),1 个数据包
9 月 22 日 15:17:10 145.89.109.1:%SEC-6-IPACCESSLOGP:列表 120 拒绝 tcp 184.105.139.98(0) -> 145.89.109.49(0),1 个数据包
9 月 22 日 15:22:10 145.89.109.1:%SEC-6-IPACCESSLOGS:列表 78 被拒绝 145.89.110.15 1 个数据包
9 月 22 日 16:20:46 145.89.109.11 28w6d:%LINEPROTO-5-UPDOWN:接口 GigabitEthernet1/20 上的线路协议,将状态更改为关闭
9 月 22 日 16:20:46 145.89.109.11 28w6d:%LINK-3-UPDOWN:接口 GigabitEthernet1/20,将状态更改为关闭

我的代码如下,但我没有得到我想要的结果:

infile = open("router1.log","r")              #Open log bestand in "read modus"
dictionary = {}                               #Maak lege dictionary aan
for line in infile:                           #For-loop die elke regel afgaat in log-bestand
    try:
        naam = line.split(":")[3]             #variable naam die regel split naar een lijst met index 3
        naam2 = line.split(":")[4]            #variable naam die regel split naar een lijst met index 4
        if naam.strip()in dictionary.keys():  #"Als" naam zich bevindt in dictionary voer onderstaande uit:
            dictionary[naam.strip()]+=1
        else:                                 #Anders voer onderstaan uit:
            dictionary[naam.strip()]=0
    except:
        continue

标签: python-3.x

解决方案


如果我正确解释了您的问题,那么您的问题是您无法获得正确的计数值。

为了解决这个问题,您希望将特定日志问题的第一次出现设置为值 1 而不是 0。所以您的 else 语句应该是:

else:
    dictionary[naam.strip()]=1

如果您不这样做,您的计数将始终少 1,希望对您有所帮助!


推荐阅读