Анализ файлов журнала, отображение журналов между указанными c датами - PullRequest
0 голосов
/ 27 апреля 2020

Я хотел бы проанализировать файл журнала и извлечь строки между двумя указанными c датами ... Я прочитал много страниц об этом, но моя проблема в том, что мой файл журнала имеет спецификацию c тип даты:

INFO - 27/04/2020 15:00:16 400 - [infoinfoinfo ] - [infoinfoinfo] - [infoinfoinfo]

Вот пример строки в моем файле журнала. Только делая greps (а я до сих пор не могу понять, как), я не вижу проблем в моей проблеме! Вы видите решение этой проблемы, глядя на мой формат даты?

Заранее спасибо !!

1 Ответ

0 голосов
/ 27 апреля 2020

Вы должны переформатировать дату в гггг / мм / дд, чтобы сравнить их.

Вы можете создать файл log.awk

{
    # create a command that will convert the date from dd/mm/yyyy to yyyy/dd/mm
    # and apply it on third field
    cmd = "echo "$3" | sed 's-\\(.*\\)/\\(.*\\)/\\(.*\\)-\\3/\\2/\\1-'"

    # execute sed and store result in datef
    cmd | getline datef
    close(cmd)

    # filter on date
    if (datef>=datemin && datef<=datemax)
        print $0
}

и вызвать вашу программу таким образом ( здесь, фильтр только на апрель 2020):

 awk -f log.awk -vdatemin=2020/04/01 -vdatemax=2020/04/30 log.log

Вы также можете добавить время к вашей дате (я не проверял это):

{
    # create a command that will convert the date from dd/mm/yyyy to yyyy/dd/mm
    # and apply it on third field
    cmd = "echo "$3" | sed 's-\\(.*\\)/\\(.*\\)/\\(.*\\)-\\3/\\2/\\1-'"

    # execute sed and store result in datef
    cmd | getline datef
    close(cmd)

    datetime = datef ":" $4

    # filter on date
    if (datetime >=datemin && datetime tef<=datemax)
        print $0
}

и вызвать вашу запрограммируйте так:

 awk -f log.awk -vdatemin=2020/04/01:12:00:10 -vdatemax=2020/04/30:15:00:00 log.log
...