Как получить меньше, чтобы искать быстрее с большими файлами журналов?

15

Я часто имею дело с невероятно большими файлами журналов (> 3 ГБ). Я заметил, что производительность менее страшна с этими файлами. Часто я хочу перейти к середине файла, но когда я говорю меньше, чтобы перейти вперед на 15 миллионов строк, это занимает минуты ...

Проблема, которую я представляю, состоит в том, что меньше нужно сканировать файл на наличие символов \ n, но это занимает слишком много времени.

Есть ли способ заставить его просто стремиться к явному смещению? например, стремиться к байтовому смещению 1,5 миллиарда в файле. Эта операция должна быть на несколько порядков быстрее. Если меньше не дает такой возможности, есть ли другой инструмент, который делает?

UsAaR33
источник
Если вы просматриваете файл на наличие запрещенных символов, верно ли, что вы удалите вышеупомянутые символы после их поиска? Если так, могу я предложитьperl -pi -e 's/\n//g;' <filename>
Майк Пеннингтон
Извините, Ским был неправильным словом. Должен был использовать скан. меньше по дизайну сканирует на новую строку (\ n). Это сканирование занимает очень много времени на больших файлах.
UsAaR33

Ответы:

21

Вы можете остановить меньше от подсчета строк, как это less -n

Чтобы перейти к определенному месту, как, скажем, 50%, less -n +50p /some/logэто было мгновенно для меня в лог-файле 1,5 ГБ.

Редактировать: Для определенного смещения байта: less -n +500000000P ./blah.log

Sekenre
источник
1
Подсчет строк никогда не был проблемой; Я мог бы просто использовать escp / ctrl-c для этого. Но это фактический ответ; P переходит к определенному байтовому смещению!
UsAaR33
5

Меньше, будучи пейджером, изначально ориентировано на линию. Когда вы запускаете, если это большой файл, он говорит «подсчет номеров строк», и вы нажимаете ESC, чтобы остановить это, но в противном случае, он делает строки. Это то, что он делает.

Если вы хотите прыгнуть прямо в середину файла и пропустить начало, вы всегда можете просто пропустить начало; Я хотел бы сделать что - то подобное tail -c +15000000 /some/log | less.

ombble
источник
3
Вы либо имеете в виду, tail -c ...либо у вас странная lastкоманда.
Алан Карри
Проблема этой стратегии заключается в том, что вы больше не можете искать во всем файле изнутри (поиск конкретных сообщений и т. Д.)
Sekenre
@AlanCurry: это просто альтернативное правописание ... <ухмылка>
wobble
0

less кажется, есть небольшие накладные расходы из настроек локали

Если вы используете только символы ASCII, вы можете немного ускорить его, используя:

LC_ALL=C less big-log-file.log

В моем случае пропускная способность увеличилась с ~ 30 Мбит / с до ~ 50 Мбит / с (скорость зависит от процессора)

Ромуальд Брюне
источник