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?
perl -pi -e 's/\n//g;' <filename>
Respostas:
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/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
fonte
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
.fonte
tail -c ...
ou você tem umlast
comando estranho .less
parece ter uma pequena sobrecarga nas configurações de localidadeSe você estiver usando apenas caracteres ASCII, poderá acelerar um pouco usando:
No meu caso, a taxa de transferência aumentou de ~ 30M ib / s para ~ 50 Mib / s (a taxa está vinculada à CPU)
fonte