Получить последние X минут файла журнала с определенной отметкой времени

Попробуйте:

parallel -j0 --line-buffer :::./script1./script2./script3
2
14.01.2020, 20:53
2 ответа

Я решил проблему с awkв своем скрипте:

ONE_HOUR_AGO="$(date -d '1 hour ago' +%Y%m%d%H)"
NOW="$(date +%Y%m%d%H)"
awk '/time: '$NOW'/,/time: '$ONE_HOUR_AGO'/' log_file.txt

Это устранило мои проблемы с этими отметками времени, и я могу анализировать файл журнала.

0
27.01.2020, 22:24

Я разбил его на пару переменных, но вы, вероятно, можете продолжить или немного лучше передать его:

fma=`date --date='5 minutes ago' +"%Y%m%d%H%M%S"`
line_num=`tac file.txt | awk -v five_min_ago=$fma\
      '(NF > 1 &&  $2 < five_min_ago ){print NR; exit 1}'`
tail -$line_num file.txt

Пояснение:

  1. fma=...говорит сохранить в переменной оболочки fmadateпять минут назад в формате год, месяц, день, час, минута, секунда, что похоже на то, что делает ваш журнал.
  2. line_num=...говорит, что нужно прочитать файл в обратном порядке и передать его на awk. В программе awkсохраните переменную bash $fmaкак five_minutes_ago, затем, если количество полей больше одного, а время журнала меньше целевого времени, распечатайте количество строк, которые мы видели до сих пор (, включая те, которые не прошли квалификацию )и вышли. Сохраните результат как переменную оболочки line_num.
  3. Наконец, используйте tail, чтобы получить последние line_numстроки изfile.txt

Замечание. :Вам придется настроить количество проверяемых полей, так как у вас, вероятно, там больше, чем просто «вещи», но это должно помочь вам в большинстве случаев.

0
27.01.2020, 22:24

Теги

Похожие вопросы