Wie zgrep die Letzte Zeile einer gz-Datei, ohne Schwanz

Hier ist mein problem, ich habe eine Reihe von big gz log-Dateien, die erste info in der Zeile ist ein datetime-text, z.B.: 2014-03-20 05:32:00.

Muss ich schauen, was der log-Dateien hat einen spezifischen Daten.
Für die init habe ich einfach ein:

           '-query-data-'
zgrep -m 1 '^20140320-04' 20140320-0{3,4}*gz

ABER WIE tun Sie das gleiche mit der letzten Zeile, ohne Prozess, ohne die ganze Datei als getan hätten, mit zcat (zu schwer):

zcat foo.gz | tail -1

Zusätzliche Informationen, die diese Protokolle erstellt werden, mit den Daten, Zeitpunkt der erstmaligen Aufzeichnung, also, wenn ich Abfragen will meldet um 14:00:00 ich Suche, auch in Dateien, die erstellt werden, BEVOR 14:00:00, als die Datei erstellt würde, um 13:50:00 Uhr und geschlossen um 14:10:00 Uhr.

  • Wegen der Art, wie die Kompression funktioniert, ist es nicht möglich, zu Lesen das Ende der Datei, ohne zu entpacken alles, bevor es.
  • gibt es ein Muster auf grep mach Ende der Datei, wie es bei den end-of-line $
  • Nein, gibt es nicht. zgrep ist im Grunde nur Rohrleitungen zcat zu grep, so was ist falsch mit zcat foo.gz | tail -1 | grep?
  • Mit großen Binärdateien sind Sie faul.
  • Aber da es die gleiche Arbeit, wie zgrep Sie gar nichts speichern, indem nicht zcat.
  • auch mit der -m option? Vielleicht check this out nur mit der "mit der Quelle", ein Blick in zgrep ' s code. Funktioniert es mit Trauben?/Zeile für Zeile?/ganze Datei? Wenn dem so ist, zgrep ist kaum ein "alias" zu zcat | grep...
  • Es könnte in der Tat mit zlib intern, aber das hat zu tun im wesentlichen die gleiche Arbeit. -m Stoppt das Lesen von der Eingabe, wenn es das limit erreicht, aber es hat immer noch zu Lesen, vom Anfang der Datei bis es dort ankommt. Ich sehe nicht, wie das ist keine Hilfe, wenn Sie versuchen zu finden die Letzte Zeile.
  • Das hilft, um das erste vorkommen von Datum / Uhrzeit in eine Datei, damit ich weiß, es passt, aber für Dateien, die erstellt wurde, bevor meine abgefragt datetime und fischte nach, es ist schneller, um rückwärts zu suchen.
  • Das problem ist, dass die komprimierten Daten sind schwer zu Prozess nach hinten. Stream-Kompression-algorithmen wie LZW, basieren auf adaptiven algorithmen, und der Leser zum verarbeiten der komprimierten Daten, um zu lernen, die Kompressionen, wie es geht.
  • Erhöht man die Frequenz auf logrotate (oder was auch immer komprimiert die log-Dateien), so dass Sie kleinere, komprimierte Dateien zu suchen? Das wird den Aufwand zu verringern, Dekomprimieren Sie die Datei, die ist einem gegeben.
  • Nur in der nächsten version... und das würde lange, lange...
  • Ist es eine option zum komprimieren der Datei mit bgzip und index der bgzipped-Datei mit tabix?
  • vielleicht, aber nur für weitere Versionen. Wenn Sie wollen, um es als eine Antwort werde ich akzeptieren.
  • Danke, aber ich glaube nicht, dass es eine ausreichend gute Antwort. In der Zwischenzeit möchte ich Sie direkt auf diese Seite stackoverflow.com/questions/429987/... stackoverflow.com/questions/236414/... lh3.github.io/2014/07/05/random-access-to-zlib-komprimierte-Dateien

Schreibe einen Kommentar