Журналы за последние n минут

Если это Solaris 11.3 (и я предполагаю, что вы используете самую последнюю версию,когда это новая сборка )вы можете использовать passwd -p, вам нужно просто проверить совместимость хеширования и использовать правильный идентификатор алгоритма хеширования в начале между двумя $ $...(http://docs.oracle.com/cd/E19253-01/816-4557/concept-23/index.html)

0
27.07.2019, 17:53
1 ответ

Если у вас установлены и perl, и Date::Parseperl-модуль, вы можете сделать это с помощью:

perl -MDate::Parse -F, -a -n -e \
  'BEGIN { $start=time() - 600 ; $p=0};
   if ($p) { print } else {
     $logtime = str2time($F[0]);
     $p=1 if ($logtime >= $start)}' /path/to/logfile

Этот лайнер perl one -предполагает, что разделителем поля -между временной меткой файла журнала и остатком данных является запятая(-F,)и используется параметр perl auto -split(-a)для автоматического разделения каждой входной строки. в массив @F.

Он использует переменную $p в качестве переключателя для включения или выключения печати, по умолчанию выключено (0 ). Если $p включен, то напечатайте текущую строку, в противном случае используйте функцию Date::Parse's str2time()для преобразования временной метки записи журнала в значение времени _t (секунд синуса эпохи, 1970 -01 -01 00 :00 :00 ), а затем проверьте, соответствует ли отметка времени строки журнала >= желаемому времени начала (600 секунд, 10 минут назад ). Если это так, установите $p на (1 ).

Если у вас есть более сложные требования, вероятно, лучше написать отдельный сценарий Perl, а не пытаться сделать это в виде одной -строки -редактирование в командной строке bash — это PITA по сравнению с использованием текстового редактора..Вы можете начать с переделки вышеуказанного вкладыша -:

#!/usr/bin/perl

use Date::Parse;

$start = time() - 600;
$p = 0;

while (<>) {
  if ($p) {
    print
  } else {
    my (@F) = split /,/;
    my $logtime = str2time($F[0]);
    $p = 1 if ($logtime >= $start);
  }
}

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

Это можно было бы сделать в awkвместо perl, но Perl-модуль Date ::Parse хорош и прост в использовании, намного проще, чем писать код для разбора даты в awk. Дата ::Parse легко устанавливается из CPAN и доступен для некоторых дистрибутивов Linux (, например. в пакете libtimedate-perlна Debian ).

Тот же самый базовый алгоритм может быть написан на Python или любом другом языке с приличной функцией анализа даты.

0
28.01.2020, 03:25

Теги

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