Làm thế nào để có được ít hơn để tìm kiếm nhanh hơn với các tệp nhật ký lớn?


15

Tôi thường xử lý các tệp nhật ký cực lớn (> 3 GB). Tôi đã nhận thấy hiệu suất của ít hơn là khủng khiếp với các tệp này. Thường thì tôi muốn nhảy vào giữa tập tin, nhưng khi tôi nói ít hơn để nhảy về phía trước 15 dòng thì phải mất vài phút ..

Vấn đề tôi tưởng tượng là ít cần quét tệp để tìm các ký tự '\ n', nhưng việc này mất quá nhiều thời gian.

Có cách nào để làm cho nó chỉ tìm cách bù đắp rõ ràng? vd: tìm cách bù byte 1,5 tỷ trong tệp. Thao tác này phải là đơn đặt hàng có cường độ nhanh hơn. Nếu ít hơn không cung cấp khả năng như vậy, có công cụ nào khác không?


nếu bạn lướt qua tệp cho các ký tự bị cấm, có phải là một giả định công bằng rằng bạn sẽ thanh lọc các ký tự đã nói ở trên sau khi tìm thấy chúng không? Nếu vậy, tôi có thể cung cấpperl -pi -e 's/\n//g;' <filename>
Mike Pennington

Xin lỗi, skim là từ sai. Nên đã sử dụng quét. ít hơn bằng cách quét thiết kế cho dòng mới (\ n). Quá trình quét này mất nhiều thời gian trên các tệp lớn.
UsAaR33

Câu trả lời:


20

bạn có thể dừng ít hơn để đếm các dòng như thế này less -n

Để chuyển đến một địa điểm cụ thể như nói 50%, less -n +50p /some/logĐây là ngay lập tức đối với tôi trên tệp nhật ký 1,5 GB.

Chỉnh sửa: Đối với một byte bù cụ thể: less -n +500000000P ./blah.log


1
Đếm dòng không bao giờ là vấn đề; Tôi chỉ có thể sử dụng escp / ctrl-c cho điều đó. Nhưng đây là câu trả lời thực tế; P nhảy đến một byte bù cụ thể!
UsAaR33

5

Ít hơn, là một máy nhắn tin, vốn đã được định hướng theo dòng. Khi bạn khởi động, nếu đó là một tệp lớn, nó sẽ nói "đếm số dòng" và bạn nhấn ESC để ngăn chặn điều đó, nhưng nếu không, nó sẽ có dòng. Đó là những gì nó làm.

Nếu bạn muốn nhảy thẳng vào giữa tập tin và bỏ qua phần đầu, bạn luôn có thể tìm kiếm quá khứ; Tôi sẽ làm một cái gì đó như tail -c +15000000 /some/log | less.


3
bạn có nghĩa là tail -c ...hoặc bạn có một lastlệnh kỳ lạ .
Alan Curry

Vấn đề với chiến lược này là bạn không thể tìm kiếm trong toàn bộ tệp nữa từ bên trong (tìm kiếm các thông báo cụ thể, v.v.)
Sekenre

@AlanCurry: Đây chỉ là một cách viết thay thế ... <grin>
womble

0

less dường như có một chi phí nhỏ từ cài đặt ngôn ngữ

Nếu bạn chỉ sử dụng các ký tự ASCII, bạn có thể tăng tốc nó lên một chút bằng cách sử dụng:

LC_ALL=C less big-log-file.log

Trong trường hợp của tôi, thông lượng tăng từ ~ 30M ib / s lên ~ 50 Mib / s (tốc độ bị ràng buộc CPU)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.