У меня есть файл журнала 70G+, и я хотел бы, чтобы самые последние записи (в журнале apache добавлялись новые элементы в конце), которые соответствовали шаблону. я могу либо:

run grep | tail

или же

run tail | grep

Вариант 1 будет длиться вечно. Вариант 2 может ничего не возвращать, тогда мне придется увеличить счет для хвоста и продолжать работать, пока я не получу что-то.

Если бы я мог переходить от последней строки к первой, это было бы идеально. Но я не смог найти ни одной опции на странице руководства grep.

Есть ли какая-нибудь хитрость, чтобы сделать это? или только на grep или с любой другой комбинацией инструментов linux?

2 ответа2

6

Я думаю, что команда, которая лучше всего вам поможет, это tac: http://linux.die.net/man/1/tac

Как говорится:
tac - объединяет и печатает файлы в обратном порядке

Таким образом, вы можете передать его в grep и сопоставить nnn количество строк перед остановкой или что-то в этом роде.

1

Это большой файл. Вы должны вращать эти журналы чаще.

Если tac слишком медленный, вы можете выбрать язык программирования с помощью команды seek (например, perl), а затем:

  • открыть файл
  • стремиться к концу
  • итеративно:
    • искать в обратном направлении некоторое количество (4K или больше)
    • прочитайте это количество текста
    • разделить на новые строки и искать что угодно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .