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?
perl -pi -e 's/\n//g;' <filename>
Jawaban:
Anda dapat berhenti menghitung garis seperti ini
less -n
Untuk melompat ke tempat tertentu seperti katakanlah 50%,
less -n +50p /some/log
ini instan bagi saya pada file log 1,5GB.Sunting: Untuk offset byte spesifik:
less -n +500000000P ./blah.log
sumber
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
.sumber
tail -c ...
atau Anda memilikilast
perintah aneh .less
tampaknya memiliki overhead kecil dari pengaturan lokalJika Anda hanya menggunakan karakter ASCII, Anda dapat mempercepatnya dengan menggunakan:
Dalam kasus saya, throughput meningkat dari ~ 30M ib / s menjadi ~ 50 Mib / s (kecepatan terikat CPU)
sumber