Como obter menos para procurar mais rapidamente com arquivos de log grandes?

11

Frequentemente estou lidando com arquivos de log incrivelmente grandes (> 3 GB). Eu notei que o desempenho de menos é terrível com esses arquivos. Muitas vezes eu quero pular no meio do arquivo, mas quando eu digo menos para avançar 15 M linhas leva alguns minutos ..

O problema que imagino é que menos precisa varrer o arquivo para os caracteres '\ n', mas isso leva muito tempo.

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

    
por UsAaR33 26.07.2012 / 01:25

3 respostas

16

você pode parar menos da contagem de linhas como essa less -n

Para pular para um local específico, como digamos 50% em, less -n +50p /some/log Isso 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

    
por 26.07.2012 / 13:16
5

Menos, sendo um pager, é inerentemente orientado a linhas. Quando você inicia, se é um arquivo grande, ele diz "contagem de números de linha" e você aperta ESC para parar, mas, por outro lado, ele faz linhas. É o que faz.

Se você quiser pular direto para o meio do arquivo e pular o começo, pode sempre procurar apenas o começo; Eu faria algo como tail -c +15000000 /some/log | less .

    
por 26.07.2012 / 02:45
0

less parece ter uma pequena sobrecarga das 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)

    
por 17.01.2017 / 16:22