Преобразование формата даты в unix

Мы используем отрицательный просмотр в регулярном выражении Perl, чтобы получить задержки > 1 мин.

perl -lane '
   BEGIN{
      $,=$";
      $dly=qr/\bdelay=(?!00:(?:00:[0-5][0-9]|01:00))(?:\d\d:\d\d:\d\d)(?=,)/;
   }
   /$dly/ and print /\b(?:Hostname|sendmail)\S+|$dly/g;
' yourfile

sed -e '
   # logic for selecting entries where delay > 1 min
   /[ ]delay=[0-9][0-9]:[0-9][0-9]:[0-9][0-9],/!d
   /[ ]delay=[0][0]:[0][0]:[0-5][0-9],/d
   /[ ]delay=[0][0]:[0][1]:[0][0],/d

   # we are here => delay > 1 min, now fish out the entries...
   s/^/\n\n/
      s/[ ]sendmail[^ ]*/\n&\n/;  s/\(\n\n.*\)\n\(.*\)\n/\2\1/
      s/[ ]delay=[^, ]*/\n&\n/;   s/\(\n\n.*\)\n\(.*\)\n/\2\1/
      s/[ ]Hostname=[^ ]*/\n&\n/; s/\(\n\n.*\)\n\(.*\)\n/\2\1/
   s/\n\n.*//;s/^\s*//
' yourfile

Вывод

sendmail[5857]: delay=00:02:34 Hostname=BY1PR0701MB1752.namprd07.prod.gmail.com]
sendmail[5478]: delay=00:01:17 Hostname=CY1PR07MB1448.namprd07.prod.googlemail.com]
sendmail[1295]: delay=00:03:31
0
29.08.2019, 09:47
1 ответ

GNU date будет анализировать даты во многих форматах. Это также позволит вам выводить дату практически в любом желаемом формате. Однако такого понятия, как "формат даты сервера" не существует.

value='2017/01/11'
date --date "$value"
11 Jan 2017 00:00:00

date --date "$value" +'%a %b %d'
Wed Jan 11

В вашем примере вы, кажется, хотите перейти с даты в файле на «завтра». GNU date тоже может это сделать:

date --date "$value + 1 day" +'%a %b %d'
Thu Jan 12

Дополнительная информация о параметрах форматирования доступна на странице руководства ( man date ).

3
28.01.2020, 02:25

Теги

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