Как выполнить grep только за последние 30 дней ввода из файла журнала? - PullRequest
0 голосов
/ 08 мая 2020

Я хочу увидеть все пакеты, которые были обновлены за последние 30 дней.

Итак, я запускаю эту команду:

cat /var/log/apt/history.log | grep -a -A 2 Upgrade

Я получаю следующий результат:

...

Upgrade: gcc-8-base:amd64 (8.3.0-6ubuntu1~18.04.1, 8.3.0-26ubuntu1~18.04), libgcc1:amd64 (1:8.3.0-6ubuntu1~18.04.1, 1:8.3.0-26ubuntu1~18.04), libstdc++6:amd64 (8.3.0-6ubuntu1~18.04.1, 8.3.0-26ubuntu1~18.04)
End-Date: 2020-03-24  10:01:31

--
Upgrade: libsasl2-2:amd64 (2.1.27~101-g0780600+dfsg-3ubuntu2, 2.1.27~101-g0780600+dfsg-3ubuntu2.1)
End-Date: 2020-03-24  10:01:35

--
Upgrade: libsystemd0:amd64 (237-3ubuntu10.33, 237-3ubuntu10.38), libpam-systemd:amd64 (237-3ubuntu10.33, 237-3ubuntu10.38), systemd:amd64 (237-3ubuntu10.33, 237-3ubuntu10.38), libnss-systemd:amd64 (237-3ubuntu10.33, 237-3ubuntu10.38)
End-Date: 2020-03-24  10:01:43

--
Upgrade: vim-common:amd64 (2:8.0.1453-1ubuntu1.1, 2:8.0.1453-1ubuntu1.3), vim-runtime:amd64 (2:8.0.1453-1ubuntu1.1, 2:8.0.1453-1ubuntu1.3), vim:amd64 (2:8.0.1453-1ubuntu1.1, 2:8.0.1453-1ubuntu1.3), vim-tiny:amd64 (2:8.0.1453-1ubuntu1.1, 2:8.0.1453-1ubuntu1.3)
End-Date: 2020-03-24  10:01:49

--
Upgrade: linux-headers-generic:amd64 (4.15.0.74.76, 4.15.0.91.83), linux-image-generic:amd64 (4.15.0.74.76, 4.15.0.91.83), linux-generic:amd64 (4.15.0.74.76, 4.15.0.91.83)
End-Date: 2020-03-24  10:02:29

--
Upgrade: git:amd64 (1:2.17.1-1ubuntu0.5, 1:2.17.1-1ubuntu0.7)
End-Date: 2020-04-27  08:31:00

--
Upgrade: git-man:amd64 (1:2.17.1-1ubuntu0.5, 1:2.17.1-1ubuntu0.7)
End-Date: 2020-04-27  08:31:06

--
Upgrade: python3-apport:amd64 (2.20.9-0ubuntu7.12, 2.20.9-0ubuntu7.14)
End-Date: 2020-04-27  08:31:09

--
Upgrade: python3-problem-report:amd64 (2.20.9-0ubuntu7.12, 2.20.9-0ubuntu7.14)
End-Date: 2020-04-27  08:31:12

--
Upgrade: apport:amd64 (2.20.9-0ubuntu7.12, 2.20.9-0ubuntu7.14)
End-Date: 2020-04-27  08:31:20


...

Теперь я хочу найти только те строки, которые были добавлены к файлу за последние 30 дней. И я хочу, чтобы он всегда соответствовал моему текущему времени, поэтому мне не нужно менять синтаксис и даты каждый раз, когда я запускаю команду, поэтому всегда 30 дней. Как видите, в строках есть даты, так что это должно быть возможно, но синтаксис для меня слишком сложен.

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Я бы адаптировал ответ квантара следующим образом, для случая, когда между Upgrade: и End-Date: есть дополнительная строка (что иногда бывает):

awk -v d="$(date -d "today -30 days" "+%F %T")" '
  /^End-Date: /{if (t && $2" "$3 > d) {print t; print $0; t=""}}
  /^Upgrade: / {t=$0}
' /var/log/apt/history.log
0 голосов
/ 08 мая 2020

Вы можете сделать следующее:

$ awk -v d="$(date -d "today -30 days" "+%F %T")"   \
      '(t && $2" "$3 > d){print t;print $0;t=""}
       /Upgrade/{t=$0}' log-file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...