Lisatud bin kaust näidistega
This commit is contained in:
68
bin/top4
Executable file
68
bin/top4
Executable file
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/python
|
||||
# encoding: utf-8
|
||||
|
||||
"""
|
||||
Skript:
|
||||
|
||||
PATH=path/to/bin:$PATH
|
||||
cat access.log | top4 | head
|
||||
|
||||
"""
|
||||
|
||||
# Loo tühi dict tüüpi objekt, siia korjame kokku URL -> mitu korda külastati vastendused
|
||||
hits = {}
|
||||
|
||||
try:
|
||||
import sys
|
||||
filename = sys.argv[1]
|
||||
if filename.endswith(".gz"):
|
||||
import gzip
|
||||
stream = gzip.open(filename)
|
||||
else:
|
||||
stream = open(filename)
|
||||
except IndexError:
|
||||
stream = sys.stdin
|
||||
sys.stderr.write("Loen standardsisendist...\n")
|
||||
|
||||
# Käi ridahaaval fail läbi
|
||||
for line in stream:
|
||||
|
||||
# Kui rea sees ei esine sõnet GET siis jäta vahele
|
||||
if "GET" not in line:
|
||||
# Hüppa järgmise tsükli algusse
|
||||
continue
|
||||
|
||||
# Rea sees oli GET, nüüd võime proovida lõpikuda rida tühikute järgi massiiviks
|
||||
fields = line.split()
|
||||
|
||||
# Massiivi indeksid algavad nullist, seitsmenda tulba indeks on 6
|
||||
path = fields[6]
|
||||
|
||||
# Kontrollime kas URL on juba võtmena kasutuses dict objektis
|
||||
if path in hits:
|
||||
# Kui on siis lisame ühe juurde
|
||||
hits[path] = hits[path] + 1
|
||||
else:
|
||||
# Kui ei ole siis määra väärtuseks 1
|
||||
hits[path] = 1
|
||||
|
||||
# Kuna dict tüüpi objekti ei saa sorteerida tuleb ta kõigepealt viia sorteeritavale kujule
|
||||
# nagu nt list:
|
||||
hits = hits.items()
|
||||
|
||||
# Nüüd hits on massiiv kahestest massiividest (path, count)
|
||||
# Sellise asja sorteerimiseks saab kasutada list objekti funktsiooni sort
|
||||
# Sorteerimisel on vaja ette anda ka funktsioon mis nopib välja asja mille järgi sorteerida
|
||||
# See on siin argument nimega key, millele on väärtuseks antud
|
||||
# nimetu (anonüümne, lambda) funktsioon mis massiivi iga elemendi (path, count)
|
||||
# kohta tagastab count negatiivse väärtuse
|
||||
hits.sort(key=lambda (path,count):-count)
|
||||
|
||||
# Massiiv on nüüd sorteeritud, esimese 10 vaste kuvamiseks saame massiviist võtta alammassiivi [:10]
|
||||
# Süntaks [algus:lõpp] kehtib samamoodi nii massiividel (list, tuple) kui ka sõnedel
|
||||
# Kui algus jäetakse vahele asendatakse see algusega
|
||||
# Kui lõpp jäetakse vahele asendatakse see lõpuga
|
||||
# Indeksid võivad negatiivsed olla
|
||||
for path, count in hits:
|
||||
print "% 9d %s" % (count, path)
|
||||
|
||||
Reference in New Issue
Block a user