Wie man die letzten N Bytes einer Datei anstatt von Zeilen abfängt / grep / awk


13

Ich habe eine Anwendung, die in einer Nur-Text-Protokolldatei (myapp.log) protokolliert, die jedoch anscheinend keine neuen Zeilenzeichen am Ende jedes Protokolleintrags schreibt. Wenn ich einen Befehl wie folgt ausführe, tail -n 50 myapp.logerhalte ich tatsächlich Hunderte von "Textzeilen" (Protokolleinträge).

Diese Protokolldatei ist sehr groß, ungefähr 1 GB, wer weiß, wie lange es her ist, dass der letzte CR und / oder LF eingefügt wurde. Wie kann ich nur sagen, die letzten 2MBs zum Beispiel?

Antworten:


26

Verwenden des -cSchalters (2 MB = 2 * 1024 * 1024 = 2097152 Byte):

tail -c 2097152 myapp.log

Danke an Petr Uzel für den Vorschlag. Bei einigen Tail-Implementierungen kann eine Einheit hinzugefügt werden, um die letzten Kilobyte (k) oder Megabyte (m) zu drucken. Beispiel:

tail -c 2m myapp.log

Beachten Sie jedoch, dass es sich nicht um einen Standard (in keinem von POSIX, UNIX (SUS) oder Linux (LSB)) handelt und nicht portabel ist. Beachten Sie auch , dass , da die Begriffe „Mega“ / „kilo“ ... und deren Abkürzungen (M, k ...) haben zweideutige Bedeutungen (1000 vs 1024), gibt es nicht viel Garantie, was dieser oder dass die Umsetzung tailbedeutet , durch 2m(obwohl die aktuellen Versionen der aktuellen Implementierungen, die dies unterstützen, für die 1024-Variante geeignet zu sein scheinen).


5
Tail sollte in der Lage sein, Zahlen mit Einheiten als Argument für den c-Schalter zu akzeptieren, tail -c 2M myapp.logsollte also auch funktionieren.
Petr Uzel

@PetrUzel: Danke. Die Antwort wurde bearbeitet, um sie hinzuzufügen.
Birei

Jetzt fühle ich mich albern :) Danke für die Schnelligkeit, weiß das wirklich zu schätzen. Toller Vorschlag!
Jwbensley

1
Perfekt, ich bin mir nicht sicher, ob dies helfen wird, aber ich werde diesen Text-String hinzufügen, weil es das ist, wonach ich gesucht habe, um hierher zu kommen (es hat eine Weile gedauert): "cat file data between two byte positions (not lines) "
Torxed
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.