2014-12-30 3 views
-2
10:01:36 adcli 
10:01:36 sshd[ 
10:01:37 adcli 
10:01:37 adcli 
10:01:37 sshd[ 
10:01:37 adcli 
10:01:37 adcli 
10:01:37 sshd[ 
10:01:37 sshd[ 
10:01:37 adcli 
10:01:37 adcli 
10:01:37 sshd[ 
10:01:37 sshd[ 
10:01:37 adcli 
10:01:37 adcli 
10:01:37 adcli 
10:01:37 runma 
10:01:37 runma 
10:01:37 sshd[ 
10:01:37 adcli 
10:01:37 adcli 
10:01:37 sshd[ 
10:01:37 sshd[ 
10:01:37 adcli 
10:01:37 adcli 
10:01:37 sshd[ 
10:01:37 roots 
10:01:37 sshd[ 
10:01:37 adcli 
10:01:37 adcli 
10:01:37 adcli 
10:01:37 sshd[ 
10:01:37 adcli 
10:01:37 adcli 
10:01:37 sshd[ 
10:01:37 sshd[ 

Вот мой подход :(Я знаю, что это не полный, но)разборе файлов/Столбцы в Python

import re 
    i="sshd" 
    j="apached" 
    k="wexd" 
    count_a=0; 
    count_b=0; 
    count_c=0; 
    file=open("hex01.txt","r") 
    for line in file: 
     for datestamp in line[0:5] 
      if line.match("datestamp"): 
        print datestamp,m=line.count("sshd"),n=line.count("apached"),0=line.count  ("wexd"),t=m+n+0 

Это входная выборка данных Я пытаюсь обрабатывать в Python. Я знаю, что получить выход можно с помощью bash, но я изучаю Python, и я считаю, что получить желаемый результат достаточно сложно. Любая помощь будет оценена, мне даже не нужен идеальный код, но алгоритм и соответствующие библиотеки python достаточно. Вывод должен быть

aprocess_count, bprocesscount, Итоговые

например: 10:01:37 10,2,1,13 - Это означает, что 10 Sshd, 2adcli и 1 корни из выше файла журнала

+0

как именно вы получите 2 adcli из этого файла? –

+0

Извините, что это был всего лишь образец вывода, а не образец вывода из предоставленного файла – Ravi

+0

Я потратил разумное время, пытаясь понять доступные библиотеки и методы, связанные с Python. Я очень новичок в python. Вот моя основная концепция, мне не нужен код, подходы и алгоритмы отлично подходят для меня. import re i = "sshd" j = "apached" k = "wexd" count_a = 0; count_b = 0; count_c = 0; ! #/USR/бен/файл питон = открыт ("hex01.txt", "г") для строки в файле: для DATESTAMP в строке [0: 5] если line.match ("метка времени") : print datestamp, m = line.count ("sshd"), n = line.count ("apached"), 0 = line.count ("wexd"), t = m + n + 0 – Ravi

ответ

0

Вы можете использовать dict.setdefault добавление нового Dict, когда мы видим новая метка времени и увеличивая sshd и т.д .. значение ключа на 1 каждый раз, когда мы видим ключ:

d = {} 
with open("in.txt") as f: 
    for line in f: 
     # split into time and sshd etc.. 
     time, res = line.split() 
     # use setdefault so we get a new dict for each timestamp and set each new key's value to 0 
     d.setdefault(time, {}).setdefault(res[:-1],0) 
     d[time][res[:-1]] += 1 

from pprint import pprint as pp 
pp(d) 
{'10:01:36': {'adcl': 1, 'sshd': 1}, 
'10:01:37': {'adcl': 20, 'root': 1, 'runm': 2, 'sshd': 10}} 

Вы также можете использовать collections.Counter Dict:

from collections import Counter 
d = {} 
with open("in.txt") as f: 
    for line in f: 
     time, res = line.split() 
     d.setdefault(time, Counter()) 
     d[time].update([res[:-1]]) 
+0

@ Падриак, сумма означает сумму всех процессов. В предыдущем примере, если вы видите вывод: 10: 01: 37 10,2,1,13 13 относится к сумме всех процессов 10 + 2 + 1, поэтому сумма все еще отсутствует. У вас замечательный новый год! – Ravi

+0

@Ravi, спасибо, сумма там 1,1 за 10:01:36 и 20,1,2,10 за 10:01:37, нет 13 –

+0

@Padriac, что я объясняю, это мы все еще не хватает суммы этих ключей; Мне также нужна сумма всех ключей (процессов) каждой строки в определенное время. 13 - сумма 10 + 2 + 1; извините за мою бедную артикуляцию. – Ravi

0
1.create_unique_dict_time /*have no clue how to make this? 
2. create_unique_dict_process /* 
for line in file.open("a.txt","r"): 
    `time,process = line.split() 
    create_unique_dic_time 
    create_unique_dict_process  
for line in file.open("a.txt","r"): 
    time,process=line.split() 
     while time= {loop through each of the elements in 1.} 
       if process={loop through each elements. in 2.} 
       print time,[{element1,...}],sum{elements} 

@Padriac, сумма относится к сумме всех процессов. В предыдущем примере, если вы видите вывод: 10: 01: 37 10,2,1,13 13 относится к сумме всех процессов 10 + 2 + 1, поэтому сумма все еще отсутствует. У вас замечательный новый год!