Jak uzyskać mniej, aby szybciej szukać dzięki dużym plikom dziennika?


15

Często mam do czynienia z niewiarygodnie dużymi plikami dziennika (> 3 GB). Zauważyłem, że wydajność tych plików jest mniejsza. Często chcę przeskoczyć do środka pliku, ale kiedy mówię mniej, aby skoczył do przodu o 15 M linii, zajmuje to kilka minut ..

Wyobrażam sobie, że problem polega na tym, że mniej trzeba skanować plik w poszukiwaniu znaków „\ n”, ale to trwa zbyt długo.

Czy istnieje sposób, aby po prostu dążyć do wyraźnego przesunięcia? np. dążyć do bajtu przesunięcia 1,5 miliarda w pliku. Ta operacja powinna być o rząd wielkości szybsza. Jeśli mniej nie zapewnia takiej zdolności, czy istnieje inne narzędzie, które to zapewnia?


jeśli przeglądasz plik w poszukiwaniu zabronionych znaków, czy jest to uczciwe założenie, że wyczyścisz wyżej wymienione postacie po ich znalezieniu? Jeśli tak, czy mogę zaoferowaćperl -pi -e 's/\n//g;' <filename>
Mike Pennington

Przepraszam, odtłuszczanie było złym słowem. Powinien był użyć skanowania. mniej wg projektu skanuje w poszukiwaniu nowej linii (\ n). To skanowanie zajmuje bardzo dużo czasu w przypadku dużych plików.
UsAaR33,

Odpowiedzi:


21

możesz zatrzymać mniej liczenia takich linii less -n

Aby przejść do określonego miejsca, na przykład 50%, less -n +50p /some/logbyło to dla mnie natychmiastowe w pliku dziennika 1,5 GB.

Edycja: Dla określonego przesunięcia bajtu: less -n +500000000P ./blah.log


1
Liczenie linii nigdy nie było problemem; Mógłbym po prostu użyć do tego escp / ctrl-c. Ale to jest właściwa odpowiedź; P przeskakuje do określonego przesunięcia bajtu!
UsAaR33

5

Mniej, będąc pageriem, z natury jest zorientowany liniowo. Podczas uruchamiania, jeśli jest to duży plik, powie „liczenie numerów linii” i wciśniesz ESC, aby to zatrzymać, ale w przeciwnym razie robi linie. To, co robi.

Jeśli chcesz przeskoczyć prosto do środka pliku i pominąć początek, zawsze możesz po prostu przejść obok początku; Zrobiłbym coś takiego tail -c +15000000 /some/log | less.


3
masz na myśli tail -c ...albo masz dziwne lastpolecenie.
Alan Curry

Problem z tą strategią polega na tym, że nie można już szukać w całym pliku z mniejszej ilości (wyszukiwanie określonych wiadomości itp.)
Sekenre

@AlanCurry: To tylko alternatywna pisownia ... <grin>
womble

0

less wydaje się mieć niewielki narzut z ustawień regionalnych

Jeśli używasz tylko znaków ASCII, możesz go nieco przyspieszyć, używając:

LC_ALL=C less big-log-file.log

W moim przypadku przepustowość wzrosła z ~ 30 M ib / s do ~ 50 Mib / s (szybkość jest związana z procesorem)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.