2016-12-06 7 views
1

Ich habe große Protokolldatei 300-500 MB und muss Suchen in ihm tun. Ich mache das gerade mit grep im PHP-Code, aber ich möchte den Code weiter optimieren. Daten, die ich brauche, sind immer innerhalb der letzten 10000 Zeilen in der Datei, also möchte ich, dass die Suche am Ende beginnt und vorwärts geht, bis das Muster gefunden wird, und stoppe.Grep Suche vom Ende der Datei

Ich fand einige Informationen, dass Tac dies tun kann, aber meine Leistungstests zeigen, dass die Verwendung von Tac 4 mal langsamer ist. Momentan dauert meine Suche etwa 0,13 Sekunden, um mit tac abgeschlossen zu werden, es dauert 0,50. Ich fühle mich, als würde ich etwas vermissen, ich würde mich über Hilfe freuen.

Meine Erwartung ist, dass, wenn ich die Datei richtig vom Ende gelesen bekomme, dies die Geschwindigkeit des Prozesses erheblich erhöhen wird.

hier ist der Code und es enthält den Timer

<?php 
exec('grep -r "search var" file.log -b | head -1', $result); 
echo $result[0]; 

$time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"]; 
echo "<br>".$time; 
?> 
+4

http://unix.stackexchange.com/a/112173 –

Antwort

1

Sie können die -r Flagge mit grep vermeiden. Und Sie wollen nur innerhalb der letzten 10000 Zeilen suchen, oder? So direkt tail es und grep das Muster.

tail file.log -n 10000 | grep "search var" 
+0

Schwanzcode für 1000 Zeilen scheint die Lösung zu sein. Meine anfänglichen Tests bei 350meg-Dateiergebnissen führen zu 0,0045490 Sekunden. Ich denke nicht, dass die Dateigröße einen großen Unterschied machen wird. Ich werde diesen Ansatz im nächsten Build verwenden und Sie wissen lassen, wie es funktioniert. Vielen Dank –

+0

Diese Lösung hat sehr gut funktioniert, danke –