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 :wink: )