Cách nối đuôi / grep / awk N byte cuối cùng của tệp, thay vì dòng


13

Tôi có một ứng dụng đang đăng nhập vào tệp nhật ký văn bản đơn giản (myapp.log) nhưng dường như không viết các ký tự dòng mới ở cuối mỗi mục nhật ký. Nếu tôi thực thi một lệnh như tail -n 50 myapp.logtôi thực sự nhận được hàng trăm "dòng" văn bản (mục nhật ký).

Tệp nhật ký này rất lớn, khoảng 1GB, ai biết CR và / hoặc LF cuối cùng đã được chèn trong bao lâu. Làm thế nào tôi có thể lấy ví dụ, 2 MB cuối cùng chẳng hạn?

Câu trả lời:


26

Sử dụng công -ctắc (2MB = 2 * 1024 * 1024 = 2097152 byte):

tail -c 2097152 myapp.log

Cảm ơn Petr Uzel cho lời đề nghị. Một số triển khai đuôi cho phép thêm một đơn vị để in kilobyte cuối cùng (k) hoặc megabyte (m), như:

tail -c 2m myapp.log

Tuy nhiên, xin lưu ý rằng nó không phải là tiêu chuẩn (không có trong POSIX, UNIX (SUS) hoặc Linux (LSB)) và không di động. Cũng lưu ý rằng vì các thuật ngữ "Mega" / "kilo" ... và các chữ viết tắt của chúng (M, k ...) có ý nghĩa mơ hồ (1000 so với 1024), không có nhiều đảm bảo về việc triển khai tailý nghĩa này hoặc ý nghĩa của việc này 2m(mặc dù các phiên bản hiện tại của các triển khai hiện tại có hỗ trợ cho phiên bản 1024).


5
Tail nên có thể chấp nhận số với các đơn vị làm đối số cho chuyển đổi c, do đó tail -c 2M myapp.logcũng nên hoạt động.
Petr Uzel

@PetrUzel: Cảm ơn. Chỉnh sửa câu trả lời để thêm nó.
Birei

Bây giờ tôi cảm thấy ngớ ngẩn :) Cảm ơn sự nhanh chóng, thực sự đánh giá cao điều đó. Đề nghị tuyệt vời!
jwbensley

1
Hoàn hảo, Không chắc điều này có giúp ích gì không nhưng tôi sẽ thêm chuỗi văn bản này vì đó là từ khóa tôi đang tìm kiếm ở đây (mất một lúc): "dữ liệu tệp mèo giữa hai vị trí byte (không phải dòng) "
Torxed
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.