|

Themen:

grep und split – simple tolle Tools

Mir wurde die Aufgabe gestellt, aus der Logdatei eines Webservers die für meinen Bereich relevanten Einträge herauszufiltern. Wir wollen also wissen wie viele Zugriffe auf bestimmte Seiten erfolgt sind. Die Logfile ist bereits von Bots Zugriffen befreit, dennoch liegen für jeden Tag ca. 15 MB an Dateien vor.

Ich schreibe also ein PHP-Skript das die Datei Zeile für Zeile auseinander pflückt. Leider kommt das Skript mit der Menge an Daten nicht klar und landet immer wieder in einen Timeout.

Ich überlege mir, kleinere Häppchen zu verwenden. In meinem Linux Mint ist split bereits vorinstalliert. Ich wechsel also in die Konsole und zerhacke die Datei mit

split -b 1MB -d quelldatei zieldatei

und erhalte 15 Dateien mit jeweils 1 MB Größe. Das Ergebnis ist leider das gleiche. Im zweiten Versuch mache ich 500 KB große Häppchen aus dem Daten. Jetzt klappt der Import. Aber es extrem mühselig jede Datei einzeln hochzuladen. 30 mal. Und das müsste ich dann jede Woche für jeden Tag machen. 7 mal 30 Dateien. Das ist Sklavenarbeit. Das muss einfacher gehen.

Ich überlege mir, die Datei zu verkleinern in dem ich mit grep den „Müll“ schon auf meinem PC entferne. Der wird das wohl besser verkraften als der Webserver mit seinen Laufzeitbeschränkungen.

grep -E 'GET /index.php?' quelldatei > zieldatei

Da ich schon vom Programmieren des Skripts her weiß, das die relevanten Aufrufe immer GET /index.php? sind, sind halt auch nur die Zeilen mit dieser Phrase für mich relevant. Und hey, aufeinmal ist das Log nur noch 5 MB groß. Komischerweise kann ich die 5 MB jetzt auch Problemlos von dem PHP Skript durchforsten lassen. Schon komisch, aber meine Statistik ist jetzt da. Jipi ;O)