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?
perl -pi -e 's/\n//g;' <filename>
Odpowiedzi:
możesz zatrzymać mniej liczenia takich linii
less -n
Aby przejść do określonego miejsca, na przykład 50%,
less -n +50p /some/log
było to dla mnie natychmiastowe w pliku dziennika 1,5 GB.Edycja: Dla określonego przesunięcia bajtu:
less -n +500000000P ./blah.log
źródło
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
.źródło
tail -c ...
albo masz dziwnelast
polecenie.less
wydaje się mieć niewielki narzut z ustawień regionalnychJeśli używasz tylko znaków ASCII, możesz go nieco przyspieszyć, używając:
W moim przypadku przepustowość wzrosła z ~ 30 M ib / s do ~ 50 Mib / s (szybkość jest związana z procesorem)
źródło