Come adattare / grep / awk gli ultimi N byte di un file, anziché le linee


13

Ho un'applicazione che sta registrando in un file di registro di testo semplice (myapp.log) ma non sembra scrivere nuovi caratteri di riga alla fine di ogni voce di registro. Se eseguo un comando come tail -n 50 myapp.logse effettivamente ricevessi centinaia di "righe" di testo (voci di registro).

Questo file di registro è molto grande, circa 1 GB, chissà da quanto tempo è stato inserito l'ultimo CR e / o LF. Come posso semplicemente dire, ad esempio, gli ultimi 2 MB?

Risposte:


26

Utilizzando lo -cswitch (2 MB = 2 * 1024 * 1024 = 2097152 byte):

tail -c 2097152 myapp.log

Grazie a Petr Uzel per il suggerimento. Alcune implementazioni di coda consentono di aggiungere un'unità per stampare gli ultimi kilobyte (k) o megabyte (m), come:

tail -c 2m myapp.log

Tuttavia, si noti che non è standard (in nessuno di POSIX, UNIX (SUS) o Linux (LSB)) e non portatile. Si noti inoltre che, poiché i termini "Mega" / "chilo" ... e le loro abbreviazioni (M, k ...) hanno significati ambigui (1000 vs 1024), non c'è molto garanzia di ciò che questo o quel attuazione tailsignificherà per 2m(anche se le versioni attuali delle attuali implementazioni che lo supportano sembrano andare per la variante 1024).


5
Tail dovrebbe essere in grado di accettare il numero con le unità come argomento per l'interruttore c, quindi tail -c 2M myapp.logdovrebbe funzionare anche.
Petr Uzel,

@PetrUzel: grazie. Modificata la risposta per aggiungerla.
Birei,

Ora mi sento sciocco :) Grazie per la prontezza, lo apprezzo molto. Ottimo consiglio!
jwbensley,

1
Perfetto, non sono sicuro se questo aiuterà, ma aggiungerò questa stringa di testo perché è quello che ero le parole chiave che stavo cercando per arrivare qui (ci è voluto un bel po 'di tempo): "dati di file cat tra posizioni di due byte (non righe) "
Torxed
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.