Извлечение значения атрибута из файла журнала и сохранение журналов в отдельном файле на основе значения атрибута - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь создать разные файлы журнала для каждого пользователя на основе шаблона. #

Поскольку файлы журналов достаточно велики (пара сотен ГБ), я хочу использовать awk или подобную команду оболочки для эффективной обработки.

Пример журнала ввода выглядит следующим образом:


2019-09-01T06:04:55+00:00 xxxxxxxx CEF: 0|XXX XXXX XXX|YYY-OS|9.0.3|end|TRAFFIC|1|rt=Sep 12 2019 06:04:55 GMT deviceExternalId=11111000000 dvchost=ABCDEFGHIJ src=0.0.0.0 dst=0.0.0.0 sourceTranslatedAddress=0.0.0.0 destinationTranslatedAddress=0.0.0.0 cs1Label=Rule_name cs1=sec_t2u_allow_ssl suser=intra\\test.user1 duser= app=ssl\n

2019-09-01T06:04:55+00:00 xxxxxxxx CEF: 0|XXX XXXX XXX|YYY-OS|9.0.3|end|TRAFFIC|1|rt=Sep 12 2019 06:04:55 GMT deviceExternalId=11111000000 dvchost=ABCDEFGHIJ src=0.0.0.0 dst=0.0.0.0 sourceTranslatedAddress=0.0.0.0 destinationTranslatedAddress=0.0.0.0 cs1Label=Rule_name cs1=sec_t2u_allow_ssl suser=intra\\ts-test.user2 duser= app=ssl\n

2019-09-01T06:04:55+00:00 xxxxxxxx CEF: 0|XXX XXXX XXX|YYY-OS|9.0.3|end|TRAFFIC|1|rt=Sep 12 2019 06:04:55 GMT deviceExternalId=11111000000 dvchost=ABCDEFGHIJ src=0.0.0.0 dst=0.0.0.0 sourceTranslatedAddress=0.0.0.0 destinationTranslatedAddress=0.0.0.0 cs1Label=Rule_name cs1=sec_t2u_allow_ssl suser= duser= app=ssl\n

Некоторые имена пользователей присутствуют, но не для всех. В случае, если "suser =" я хочу поместить его в отдельный файл

Ожидаемый формат вывода будет:


###test.user1.log -->###

2019-09-01T06:04:55+00:00 xxxxxxxx CEF: 0|XXX XXXX XXX|YYY-OS|9.0.3|end|TRAFFIC|1|rt=Sep 12 2019 06:04:55 GMT deviceExternalId=11111000000 dvchost=ABCDEFGHIJ src=0.0.0.0 dst=0.0.0.0 sourceTranslatedAddress=0.0.0.0 destinationTranslatedAddress=0.0.0.0 cs1Label=Rule_name cs1=sec_t2u_allow_ssl suser=intra\\\\test.user1 duser= app=ssl\n

.....

###ts-test.user2.log --> ###

2019-09-01T06:04:55+00:00 xxxxxxxx CEF: 0|XXX XXXX XXX|YYY-OS|9.0.3|end|TRAFFIC|1|rt=Sep 12 2019 06:04:55 GMT deviceExternalId=11111000000 dvchost=ABCDEFGHIJ src=0.0.0.0 dst=0.0.0.0 sourceTranslatedAddress=0.0.0.0 destinationTranslatedAddress=0.0.0.0 cs1Label=Rule_name cs1=sec_t2u_allow_ssl suser=intra\\ts-test.user2 duser= app=ssl\n

.....

###others.log --> ###

2019-09-01T06:04:55+00:00 xxxxxxxx CEF: 0|XXX XXXX XXX|YYY-OS|9.0.3|end|TRAFFIC|1|rt=Sep 12 2019 06:04:55 GMT deviceExternalId=11111000000 dvchost=ABCDEFGHIJ src=0.0.0.0 dst=0.0.0.0 sourceTranslatedAddress=0.0.0.0 destinationTranslatedAddress=0.0.0.0 cs1Label=Rule_name cs1=sec_t2u_allow_ssl suser= duser= app=ssl\n

Я попытался найти регулярное выражение, соответствующее шаблону.

Это регулярное выражение "(\ bsuser \ b) = (. *? (? = \ S \ w + = | $))" можно использовать для сопоставления с шаблоном, аналогичным "suser = ABCD \\ ц-test.user"

1 Ответ

0 голосов
/ 04 октября 2019

Некоторые операторы регулярных выражений, которые были включены в вопрос, недоступны в имеющейся у меня awk 4.1.4 (например, '(? =)'). Чтобы регулярное выражение нуждалось в некоторой модификации

Вот небольшой однострочный сценарий awk, который вы можете использовать в качестве отправной точки

 awk '
/suser=/ {
    # fallback log file
    logfile = "others.log"
    # Extra user ID to items[1] from $0 '**suser=' token
    if ( match($0, " suser=\\S+\\.(\\w+)", items) ) {
        logfile = items[1] ".log"
    } 
    # print NR, logfile
    print $0 > logfile
}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...