Como rabiscar / grep / awk os últimos N bytes de um arquivo, ao invés de linhas

8

Eu tenho um aplicativo que está registrando em um arquivo de log de texto simples (myapp.log), mas não parece estar escrevendo novos caracteres de linha no final de cada entrada de log. Se eu executar um comando como tail -n 50 myapp.log , recebo centenas de "linhas" de texto (entradas de log).

Este arquivo de log é muito grande, aproximadamente 1 GB, quem sabe há quanto tempo o último CR e / ou LF foi inserido. Como posso pegar, digamos, os últimos 2MBs por exemplo?

    
por jwbensley 01.10.2012 / 17:12

1 resposta

19

Usando a opção -c (2MB = 2 * 1024 * 1024 = 2097152 bytes):

tail -c 2097152 myapp.log

Obrigado a Petr Uzel pela sugestão. Algumas implementações finais permitem adicionar uma unidade para imprimir os últimos kilobytes (k) ou megabytes (m), como:

tail -c 2m myapp.log

No entanto, observe que não é padrão (em nenhum POSIX, UNIX (SUS) ou Linux (LSB)) e não é portável. Note também que como os termos "Mega" / "kilo" ... e suas abreviações (M, k ...) têm significados ambíguos (1000 x 1024), não há muita garantia de que esta ou aquela implementação de tail significará por 2m (embora as versões atuais das implementações atuais que o suportam pareçam estar indo para a variante 1024).

    
por 01.10.2012 / 17:16

Tags