Come ottenere meno per cercare più velocemente con file di registro di grandi dimensioni?


15

Ho spesso a che fare con file di registro incredibilmente grandi (> 3 GB). Ho notato che le prestazioni di less sono terribili con questi file. Spesso voglio saltare nel mezzo del file, ma quando dico di meno per saltare avanti di 15 M linee ci vogliono minuti ..

Il problema che immagino è che meno bisogno di scansionare il file per i caratteri '\ n', ma ci vuole troppo tempo.

C'è un modo per farlo solo cercare un offset esplicito? ad es. cercare di spostare l'offset di 1,5 miliardi nel file. Questa operazione dovrebbe essere più rapida per ordini di grandezza. Se meno non fornisce tale abilità, esiste un altro strumento che lo fa?


se stai sfogliando il file per i caratteri proibiti, è ragionevole supporre che eliminerai i suddetti personaggi dopo averli trovati? Se è così, posso offrireperl -pi -e 's/\n//g;' <filename>
Mike Pennington il

Spiacente, skim era la parola sbagliata. Avrei dovuto usare la scansione. meno dalle scansioni di progettazione per newline (\ n). Questa scansione richiede molto tempo su file di grandi dimensioni.
UsAaR33,

Risposte:


21

puoi smettere di contare dal contare le righe in questo modo less -n

Per passare a un luogo specifico come dire il 50% in, less -n +50p /some/logquesto è stato istantaneo per me su un file di registro da 1,5 GB.

Modifica: per un offset byte specifico: less -n +500000000P ./blah.log


1
Il conteggio delle righe non è mai stato il problema; Potrei semplicemente usare escp / ctrl-c per quello. Ma questa è la risposta effettiva; P passa a un offset di byte specifico!
UsAaR33,

5

Meno, essendo un cercapersone, è intrinsecamente orientato alla linea. All'avvio, se si tratta di un file di grandi dimensioni, viene indicato "conteggio dei numeri di riga" e si preme ESC per interromperlo, ma in caso contrario esegue le righe. È quello che fa.

Se vuoi saltare direttamente nel mezzo del file e saltare l'inizio, puoi sempre cercare oltre l'inizio; Farei qualcosa del genere tail -c +15000000 /some/log | less.


3
intendi tail -c ...o hai un lastcomando strano .
Alan Curry,

Il problema con questa strategia è che non puoi più cercare l'intero file dall'interno (cercando messaggi specifici, ecc.)
Sekenre,

@AlanCurry: È solo un'ortografia alternativa ... <grin>
womble

0

less sembra avere un piccolo overhead dalle impostazioni locali

Se stai usando solo caratteri ASCII, puoi accelerarlo un po 'usando:

LC_ALL=C less big-log-file.log

Nel mio caso, il throughput è aumentato da ~ 30 M ib / sa ~ 50 Mib / s (la velocità è legata alla CPU)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.