Як хвостик / grep / awk останні N байтів файлу, а не рядки


14

У мене є програма, яка веде вхід у звичайний текстовий файл журналу (myapp.log), але, схоже, не пише нових символів рядків у кінці кожного запису журналу. Якщо я виконую команду, як tail -n 50 myapp.logя фактично отримую сотні "рядків" тексту (записи в журналі).

Цей файл журналу дуже великий, приблизно 1 Гб, хто знає, як давно було вставлено останні CR та / або LF. Як я можу просто взяти, скажімо, останні 2 Мб, наприклад?

Відповіді:


27

За допомогою -cперемикача (2 МБ = 2 * 1024 * 1024 = 2097152 байт):

tail -c 2097152 myapp.log

Дякую Петру Узелу за пропозицію. Деякі хвостові реалізації дозволяють додати одиницю для друку останніх кілобайт (k) або мегабайт (m), наприклад:

tail -c 2m myapp.log

Однак зауважте, що він не є стандартним (ні в одному з POSIX, UNIX (SUS) або Linux) (LSB)) і не є портативним. Також зауважте, що оскільки терміни "мега" / "кіло" ... та їх абревіатури (М, к ...) мають неоднозначне значення (1000 проти 1024), не існує великої гарантії того, що tailозначатиме те чи інше реалізація 2m(хоча поточні версії поточних реалізацій, які підтримують, схоже, відповідають варіанту 1024).


5
Хвост повинен мати можливість приймати число з одиницями як аргумент для перемикача c, тому tail -c 2M myapp.logвін також повинен працювати.
Петро Узель

@PetrUzel: Дякую Відредагував відповідь, щоб додати її.
Бірей

Тепер я відчуваю себе дурним :) Дякую за оперативність, дуже ціную це. Чудова пропозиція!
jwbensley

1
Ідеально, не впевнений, чи це допоможе, але я додам цей текстовий рядок, тому що саме це були ключові слова, які я шукав, щоб потрапити сюди (зайняв час): "Дані файлу кішки між двома позиціями байтів (не рядками) "
Тортується
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.