Page 1 of 1
wie oft kommt ein String im Log vor ?
Posted: 2010-11-30 09:52
by amiga1200
ich habe eine Logdaei, die ca. 5 GB groß ist.
Nun will ich wissen, wie oft sich dort ein bestimmtes Bild (z.B. OSLO12345.jpg) wieder finde.
Ich kann mir zwar ein VB/PHP Tool schreiben, aber das geht bestimmt auch
unter der Shell einfacher?
Re: wie oft kommt ein String im Log vor ?
Posted: 2010-11-30 10:25
by amiga1200
ich vermute, der String kommt ca.200 mal vor,
da brauche ich schon die genaue Anzahl.
Dann werde ich mir doch ein Script in PHP schreiben müssen.
oder hat vielleicht hier zufällig jemand ein Shell-Script,
was sowas macht?
Mit Shell bin ich noch etwas auf dem Kriegsfuss
Re: wie oft kommt ein String im Log vor ?
Posted: 2010-11-30 10:57
by daemotron
Ungetestet:
Code: Select all
awk 'BEGIN {ausdruck="gesuchter string"; vk=0; tmp=""; i=0} {tmp=$0; i=index(tmp, ausdruck); while(i>0){vk++;tmp=substr(tmp,i,length(tmp)-i+1);i=index(tmp, ausdruck)}} END {print vk}' /pfad/zu/datei
Re: wie oft kommt ein String im Log vor ?
Posted: 2010-11-30 10:59
by Roger Wilco
Warum nicht einfach `grep -c $SEARCH_STRING /path/to/file`?
Logdateien sind i. d. R. zeilenorientiert, so dass das problemlos funktionieren sollte.
Re: wie oft kommt ein String im Log vor ?
Posted: 2010-11-30 11:07
by daemotron
grep -c gibt nur die Anzahl der Zeilen aus, in denen der gesuchte String vorkommt. Dem OP reicht diese Angabe jedoch nicht - so habe ich seine Antwort auf matzewe01's Vorschlag jedenfalls interpretiert. Daher die kranke Verrenkung mit awk (mit Perl wäre das wohl einfacher gewesen...) :-?
A propos:
matzewe01 wrote:Code: Select all
cat <dateiname> | grep OSLO12345.jpg | wc -l
Dafür gibt's den useless use of cat Award - den hab ich schon lange nicht mehr vergeben :D
Re: wie oft kommt ein String im Log vor ?
Posted: 2010-11-30 14:32
by daemotron
So, hier noch eine Lösung für vollschmerzbefreite Python-Fanatiker (auszuführen im interaktiven Python-Interpreter oder alternativ
bpython):
Code: Select all
fp = open("/pfad/zu/date", "r")
content = fp.read()
import re
len(re.findall(r"pattern", content, re.MULTILINE))
fp.close()
Alternativ einfach das angehängte Skript runterladen (da steht die Langfassung drin), nach /usr/local/bin/ecount kopieren, chmod 0755 drauf und dann einfach
Code: Select all
ecount "meinemuster\.jpg" /var/log/meinlog
loslassen (und hoffen, dass es keine Exception gibt

)