вырезать фрагмент файла на основе времени записи строк

вырезать фрагмент файла на основе времени записи строк

У меня есть постоянно работающий процесс с файлом журнала, размер которого может достигать 5 гигабайт. Иногда мне приходится извлекать часть этого журнала на основе определенного интервала времени (обычно я использую dd). Есть ли в Linux команда, позволяющая извлекать часть журнала на основе определенного интервала времени?

PS: в большинстве строк этого журнала нет отметки времени.

решение1

Если нет команды, которая позволяет это сделать (как предлагает Визе), почему бы вам не создать внешний индекс вашего файла?

Идея такова: можно создать скрипт, который будет работать вечно (или почти вечно, см. примечания ниже), и задать временные интервалы для создания индекса.

PIDofThisInstance=$$
# ... you code for the header, checks... 
while true  ; do
  # This is the core of your cycle
    sync   # Maybe
    CurrentSize=`ls -s $MyFile  | awk '{print $1} ' `
    CurrentTime=`date +"%Y%m%d%H%M%S"`
    echo $CurrentTime $CurrentSize >> $Log_Of_My_Log_File
    sleep $TimeToSleep
  # if (exit-condition)
  # then
  #    break           #Exit from the infinite loop.
  # fi
done 

После этого вы можете сделать другой скрипт, который, учитывая начальную/конечную дату/время, отвечает вам начальными/конечными размерами. Из этих чисел вы можете вырезать свой файл.

Вы сказали, что это огромный файл. Поэтому я не предлагаю вам делать сномера строки может быть head MyFile.log -n xxx | tail -n yyy. Это будет долго. Лучше работать с размером.

Примечания:

  • Если это лог с форматированным выводом (даже если вы его не знаете), всегда возможно, что существует какой-то аналитический инструмент от компании-разработчика/программиста. Возможно, он выйдет даже спустя годы. ИМХО лучше не трогать этот формат и создать отдельный файл.
  • Впишите в параметры скрипта текущий PID (на случай, если вам нужно завершить процесс вручную), имя файла (объекта логирования), если вы знаете PID программы, которая генерирует лог...
  • Цикл может быть бесконечным или прекратиться, если возникнет такое условие, как: PID программы, которая генерирует журнал, больше не существует, файл больше не существует, фактический размер меньше старого (вы перемещаете файл или перезапускаете журнал, вам необходимо перезапустить индексацию).
  • Если вы сохраняете в памяти $LastSize, вы можете решить не печатать строки в «журнале журнала», когда это не нужно, или останавливать после длительного времени бездействия (или динамически изменять временной интервал...)

Связанный контент