Bagaimana cara mendapatkan lebih sedikit untuk mencari lebih cepat dengan file log besar?

15

Saya sering berurusan dengan file log yang sangat besar (> 3 GB). Saya perhatikan kinerja yang kurang buruk dengan file-file ini. Seringkali saya ingin melompat melakukan bagian tengah file, tetapi ketika saya mengatakan lebih sedikit untuk melompat maju 15 baris M butuh beberapa menit ..

Masalah yang saya bayangkan adalah bahwa kurang perlu memindai file untuk karakter '\ n', tetapi itu terlalu lama.

Apakah ada cara untuk membuatnya hanya mencari offset eksplisit? misalnya berusaha untuk mengimbangi 1,5 miliar dalam file. Operasi ini harus menjadi urutan besarnya lebih cepat. Jika kurang tidak memberikan kemampuan seperti itu, apakah ada alat lain yang bisa?

UsAaR33
sumber
jika Anda membaca sekilas file untuk karakter terlarang, apakah itu asumsi yang adil bahwa Anda akan membersihkan karakter yang disebutkan setelah menemukan mereka? Jika demikian, boleh saya menawarkanperl -pi -e 's/\n//g;' <filename>
Mike Pennington
Maaf, skim adalah kata yang salah. Seharusnya menggunakan scan. lebih sedikit dengan pemindaian desain untuk baris baru (\ n). Pemindaian ini memakan waktu sangat lama pada file besar.
UsAaR33

Jawaban:

20

Anda dapat berhenti menghitung garis seperti ini less -n

Untuk melompat ke tempat tertentu seperti katakanlah 50%, less -n +50p /some/logini instan bagi saya pada file log 1,5GB.

Sunting: Untuk offset byte spesifik: less -n +500000000P ./blah.log

Sekenre
sumber
1
Penghitungan garis tidak pernah menjadi masalah; Saya hanya bisa menggunakan escp / ctrl-c untuk itu. Tapi ini jawaban yang sebenarnya; P melompat ke byte byte tertentu!
UsAaR33
5

Kurang, menjadi pager, pada dasarnya berorientasi pada garis. Ketika Anda memulai, jika ini adalah file besar itu akan mengatakan "menghitung nomor baris" dan Anda menekan ESC untuk menghentikannya, tetapi sebaliknya, itu baris. Itu yang dilakukannya.

Jika Anda ingin melompat langsung ke tengah file dan melewati awal, Anda selalu dapat mencari melewati awal; Saya akan melakukan sesuatu seperti tail -c +15000000 /some/log | less.

womble
sumber
3
Anda maksud tail -c ...atau Anda memiliki lastperintah aneh .
Alan Curry
Masalah dengan strategi ini adalah bahwa Anda tidak dapat mencari dalam seluruh file lagi dari dalam kurang (mencari pesan tertentu dll)
Sekenre
@AlanCurry: Ini hanya ejaan alternatif ... <grin>
womble
0

less tampaknya memiliki overhead kecil dari pengaturan lokal

Jika Anda hanya menggunakan karakter ASCII, Anda dapat mempercepatnya dengan menggunakan:

LC_ALL=C less big-log-file.log

Dalam kasus saya, throughput meningkat dari ~ 30M ib / s menjadi ~ 50 Mib / s (kecepatan terikat CPU)

Romuald Brunet
sumber