Linuxのログファイル/var/log/messages
を読んでみましょう。この線のパターンから、[email protected]
のようなユーザーの電子メールアドレスを見て、str.partition()
メソッドを使用して、リストインデックスとして2つの部分に分けて、最初のものをさらにリストに分けます最後のインデックス値を取ることの容易さのために、これはユーザIDであり、それは正常に動作しています。ファイルからuniqの名前をソートしてカウントするPython
私はユーザのリストと総数を得ることができると言っていますが、私は各ユーザの出現を数えて、user_name: Count
のキーと値を印刷する必要があります。
11月28日午前9時00分08秒foxopt210 RSHD [6157]:たpam_rhosts(RSH:AUTH):rajeshm
#!/usr/bin/python3
f= open("/var/log/messages")
count = 0
for line in f:
if "allowed access" in line:
count+=1
user_id = line.partition('@')[0]
user_id = user_id.split()[-1]
print(user_id)
f.close()
print("--------------------")
print("Total Count :" ,count)
として[email protected]へ アクセスを許可現在のコードは以下のように働いている:
bash-4.1$ ./log.py | tail
navit
akaul
akaul
pankaja
vishalm
vishalm
rajeshm
rajeshm
--------------------
Total Count : 790
を周りグーグルでいる間、私はこの 目的のために辞書を使用してのアイデアを取得し、期待どおりに働いている:
#!/usr/bin/python3
from collections import Counter
f= open("/var/log/messages")
count = 0
dictionary = {}
for line in f:
if "allowed access" in line:
user_id = line.partition('@')[0]
user_count = user_id.split()[-1]
if user_count in dictionary:
dictionary[user_count] += 1
else:
dictionary[user_count] = 1
for user_count, occurences in dictionary.items():
print(user_count, ':', occurences)
そして、私の出力は、必要に応じて次のとおりです。この練習のために周りのより良い方法があれば、私は見ているだけだ
bash-4.1$ ./log2.py
rajeshm : 5
navit : 780
akaul : 2
pankaja : 1
vishalm : 2
。
'辞書= collections.Counter(line.partition ( '@ ')[0] .rsplit(なし、1)'行内の ''アクセス許可 ''の場合の ''行内 ''の場合 '' user_countの場合、dictionary.most_common()内のcount:print(user_count、 count、sep = ':') 'となります。 –
@MartijnPieters、あなたの入力のthnx ..私はこれを試してみます。 – krock1516