Como conseguir menos para procurar mais rápido com arquivos de log grandes?

15

Costumo lidar com arquivos de log incrivelmente grandes (> 3 GB). Notei que o desempenho de menos é terrível com esses arquivos. Muitas vezes, eu quero pular no meio do arquivo, mas quando digo menos para pular 15 linhas, leva minutos.

O problema que imagino é que menos precisa digitalizar o arquivo em busca de caracteres '\ n', mas isso leva muito tempo.

Existe uma maneira de fazê-lo apenas procurar um deslocamento explícito? por exemplo, procure byte compensar 1,5 bilhão no arquivo. Essa operação deve ter ordens de magnitude mais rápidas. Se menos não fornece essa capacidade, existe outra ferramenta que fornece?

UsAaR33
fonte
se você estiver vasculhando o arquivo em busca de caracteres proibidos, é uma suposição justa que você limpará os caracteres mencionados após encontrá-los? Se sim, posso oferecer #perl -pi -e 's/\n//g;' <filename>
Mike Pennington
Desculpe, desnatado era a palavra errada. Deveria ter usado a digitalização. menos, por design, procura nova linha (\ n). Essa verificação leva muito tempo em arquivos grandes.
UsAaR33

Respostas:

20

você pode parar menos de contar linhas como esta less -n

Para pular para um local específico, como digamos 50%, less -n +50p /some/logisso foi instantâneo para mim em um arquivo de log de 1,5 GB.

Editar: para um deslocamento de bytes específico: less -n +500000000P ./blah.log

Sekenre
fonte
1
A contagem de linhas nunca foi o problema; Eu poderia apenas usar escp / ctrl-c para isso. Mas esta é a resposta real; P salta para um deslocamento de byte específico!
UsAaR33
5

Menos, sendo um pager, é inerentemente orientado a linhas. Quando você inicia, se é um arquivo grande, ele diz "contando números de linha" e você pressiona ESC para interromper isso, mas, caso contrário, ele faz linhas. É o que faz.

Se você quiser pular direto para o meio do arquivo e pular o início, sempre poderá procurar além do início; Eu faria algo assim tail -c +15000000 /some/log | less.

mulher
fonte
3
você quer dizer tail -c ...ou você tem um lastcomando estranho .
27712 Alan Curry
O problema com essa estratégia é que você não pode procurar em todo o arquivo de mais de dentro de menos (procurando por mensagens específicas etc.)
Sekenre
@AlanCurry: É apenas uma ortografia alternativa ... <grin>
womble
0

less parece ter uma pequena sobrecarga nas configurações de localidade

Se você estiver usando apenas caracteres ASCII, poderá acelerar um pouco usando:

LC_ALL=C less big-log-file.log

No meu caso, a taxa de transferência aumentou de ~ 30M ib / s para ~ 50 Mib / s (a taxa está vinculada à CPU)

Romuald Brunet
fonte