¿Cómo obtener menos para buscar más rápido con grandes archivos de registro?

15

A menudo estoy tratando con archivos de registro increíblemente grandes (> 3 GB). He notado que el rendimiento de less es terrible con estos archivos. A menudo quiero saltar haciendo el medio del archivo, pero cuando le digo menos que salte 15 líneas M me lleva unos minutos.

El problema que imagino es que menos necesita escanear el archivo en busca de caracteres '\ n', pero eso lleva demasiado tiempo.

¿Hay alguna manera de hacer que solo busque un desplazamiento explícito? por ejemplo, buscar compensar byte 1.5 mil millones en el archivo. Esta operación debería ser de órdenes de magnitud más rápido. Si menos no proporciona tal habilidad, ¿hay otra herramienta que sí lo haga?

UsAaR33
fuente
Si está hojeando el archivo en busca de caracteres prohibidos, ¿es una suposición justa que purgará los caracteres antes mencionados después de encontrarlos? Si es así, ¿puedo ofrecerleperl -pi -e 's/\n//g;' <filename>
Mike Pennington
Lo siento, descremado era la palabra equivocada. Debería haber usado escaneo. menos por escaneos de diseño para nueva línea (\ n). Este escaneo lleva mucho tiempo en archivos grandes.
UsAaR33

Respuestas:

21

puede evitar contar menos líneas como esta less -n

Para saltar a un lugar específico como, por ejemplo, 50%, less -n +50p /some/logesto fue instantáneo para mí en un archivo de registro de 1.5GB.

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

Sekenre
fuente
1
El conteo de líneas nunca fue el problema; Podría usar escp / ctrl-c para eso. Pero esta es la respuesta real; ¡P salta a un byte offset específico!
UsAaR33
5

Menos, siendo un localizador, está inherentemente orientado a la línea. Cuando inicia, si es un archivo grande, dirá "contar números de línea" y presiona ESC para detener eso, pero de lo contrario, hace líneas. Es lo que hace.

Si desea saltar directamente al medio del archivo y omitir el comienzo, siempre puede buscar más allá del principio; Me gustaría hacer algo así tail -c +15000000 /some/log | less.

womble
fuente
3
quieres decir tail -c ...o tienes un lastcomando extraño .
Alan Curry
El problema con esta estrategia es que ya no puede buscar en todo el archivo desde menos (buscando mensajes específicos, etc.)
Sekenre
@AlanCurry: Es solo una ortografía alternativa ... <grin>
womble
0

less parece tener una pequeña sobrecarga de la configuración regional

Si está usando solo caracteres ASCII, puede acelerarlo un poco usando:

LC_ALL=C less big-log-file.log

En mi caso, el rendimiento aumentó de ~ 30M ib / sa ~ 50 Mib / s (la velocidad está vinculada a la CPU)

Romuald Brunet
fuente