Çizgiler yerine bir dosyanın son N baytını kuyruk / grep / awk


14

Düz metin günlük dosyasına (myapp.log) günlüğe kaydeden bir uygulama var ama her günlük girdisinin sonunda yeni satır karakterleri yazıyor gibi görünmüyor. tail -n 50 myapp.logYüzlerce "satır" metni (günlük girişleri) alıyorum gibi bir komut yürütürsem.

Bu günlük dosyası çok büyük, kabaca 1GB, son CR ve / veya LF'nin ne kadar süre önce eklendiğini bilen. Örneğin, son 2MB'yi nasıl söyleyebilirim?

Yanıtlar:


27

-cAnahtarı kullanarak (2MB = 2 * 1024 * 1024 = 2097152 bayt):

tail -c 2097152 myapp.log

Öneri için Petr Uzel'e teşekkürler . Bazı kuyruk uygulamaları, son kilobaytları (k) veya megabaytları (m) yazdırmak için bir birim eklemenize izin verir:

tail -c 2m myapp.log

Bununla birlikte, standart olmadığını (POSIX, UNIX (SUS) veya Linux (LSB) hiçbirinde) ve taşınabilir olmadığını lütfen unutmayın. Ayrıca, "Mega" / "kilo" ... terimlerinin ve kısaltmalarının (M, k ...) belirsiz anlamları (1000'e karşı 1024) olduğu için, bunun ya da bu uygulamanın ne tailanlama geleceğine dair pek bir garanti olmadığını unutmayın . 2m(mevcut uygulamaları destekleyen destekleyen sürümleri 1024 varyant için geçerli gibi görünmektedir).


5
Kuyruk c anahtarının argümanı olarak birimleri olan sayıyı kabul edebilmelidir, bu yüzden tail -c 2M myapp.logde çalışmalıdır.
Petr Uzel

@PetrUzel: Teşekkürler. Cevabı eklemek için düzenledi.
Birei

Şimdi aptal hissediyorum :) Hızlılık için teşekkürler, gerçekten takdir ediyorum. Büyük öneri!
jwbensley

1
Mükemmel, Bu yardımcı olur emin değilim ama ben bu metin dizesini ekleyeceğim çünkü ben buraya almak için aradım anahtar kelimeler oldu (iyi bir süre aldı): "iki bayt pozisyonları arasında kedi dosya verileri (satırlar değil) "
Torxed
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.