I am often dealing with incredibly large log files (>3 GB). I've noticed the performance of less is terrible with these files. Often I want to jump do the middle of the file, but when I tell less to jump forward 15 M lines it takes minutes..
The problem I imagine is that less needs to scan the file for '\n' characters, but that takes too long.
Is there a way to make it just seek to an explicit offset? e.g. seek to byte offset 1.5 billion in the file. This operation should be orders of magnitude faster. If less does not provide such an ability, is there another tool that does?
you can stop less from counting lines like this
less -n
To jump to a specific place like say 50% in,
less -n +50p /some/log
This was instant for me on a 1.5GB log file.Edit: For a specific byte offset:
less -n +500000000P ./blah.log
Less, being a pager, is inherently line-oriented. When you startup, if it's a large file it'll say "counting line numbers" and you hit ESC to stop that, but otherwise, it does lines. It's what it does.
If you want to jump straight into the middle of file and skip the beginning, you can always just seek past the beginning; I'd do something like
tail -c +15000000 /some/log | less
.less
seems to have a small overhead from the locale settingsIf you're using ASCII only characters, you can speed it up a bit by using:
In my case, the throughput increased from ~ 30M ib/s to ~ 50 Mib/s (rate is CPU bound)