Парсить файл журналов в PowerShell с использованием регулярных выражений

Вопрос или проблема

Пожалуйста, помогите. Есть файл журнала следующего типа

02.11.2024 19:13:47.431  Подключить сокет [73664050] ("", "10.10.10.1")
02.11.2024 19:13:47.789  [159211164] TX 
02.11.2024 19:13:47.789  [159211164] RX 
02.11.2024 19:13:47.797  [159211164] TX 
02.11.2024 19:13:47.797  [159211164] RX
02.11.2024 19:13:48.274  Информация о сокете [73664050]: (...э.A ...эADDRESS=71F2;71F2§.)
02.11.2024 19:13:48.274  Код устройства сокета [73664050] 71F2 (29170)
02.11.2024 19:15:14.257  [73664050] TX
02.11.2024 19:15:14.257  [73664050] RX 
02.11.2024 19:15:14.267  [73664050] TX 
02.11.2024 19:15:14.267  [73664050] RX
.....
02.11.2024 19:20:14.907  [159211164] TX 
02.11.2024 19:20:14.907  [159211164] RX 
02.11.2024 19:20:14.921  [159211164] TX 
02.11.2024 19:20:14.921  [159211164] RX 
02.11.2024 19:20:20.142  [159211164] RX 
02.11.2024 19:20:20.992  Отключить сокет [73664050] ("", "10.10.10.1")
02.11.2024 19:20:21.106  [159211164] RX 
02.11.2024 19:20:21.127  [159211164] RX
02.11.2024 19:20:21.396  [159211164] TX 
02.11.2024 19:20:21.396  [159211164] RX 
02.11.2024 19:20:21.405  [159211164] TX 
02.11.2024 19:20:21.405  [159211164] RX 06
02.11.2024 19:20:22.227  Подключить сокет [184509040] ("", "10.10.10.2")
02.11.2024 19:20:22.962  Информация о сокете [184509040]: (...э.A ...эADDRESS=7192;7192.м)
02.11.2024 19:20:22.962  Код устройства сокета [184509040] 7192 (29074)

Мне нужно получить IP-адрес и коды устройства. Проблема в том, что устройство может появляться много раз за 5 минут, но мне нужно получить его только 1 раз. Другие устройства также могут появляться между сокетами

Я также хотел бы получить количество RX и TX в сокетах. Но это не обязательно

Ответ или решение

Для решения задачи парсинга лог-файла в PowerShell с использованием регулярных выражений, мы можем следовать четкому алгоритму. Это позволит нам извлечь интересующие данные, такие как IP-адреса и коды устройств, а также подсчитать количество RX и TX сообщений.

Шаг 1: Определение регулярных выражений

Нам понадобятся регулярные выражения для поиска нужных данных в лог-файле. Вот основные паттерны:

  1. IP-адрес: Для извлечения IP-адреса можно использовать следующее регулярное выражение:

    \(""\s*,\s*"(?<ip>\d{1,3}(?:\.\d{1,3}){3})"\)

    Это выражение захватывает IP-адрес из строки, содержащей его.

  2. Коды устройств: Для нахождения кодов устройств используем:

    device codes\s+(?<code>\d+)

    Это будет искать строки, содержащие информацию о кодах устройств.

  3. TX и RX: Для подсчета TX и RX сообщений мы можем использовать такие паттерны:

    \[(\d+)\]\s+(TX|RX)

Шаг 2: Реализация парсинга в PowerShell

Теперь, используя вышеуказанные регулярные выражения, мы можем написать сценарий на PowerShell, который будет обрабатывать лог-файл и извлекать нужные данные.

# Путь к лог-файлу
$logFilePath = "C:\path\to\logfile.log"

# Считываем содержимое файла
$logContent = Get-Content $logFilePath

# Хранение уникальных адресов и кодов
$uniqueDevices = @{}

# Переменные для подсчета TX и RX
$txCount = 0
$rxCount = 0

# Парсинг строк
foreach ($line in $logContent) {
    # Поиск IP-адреса
    if ($line -match '\(""\s*,\s*"(?<ip>\d{1,3}(?:\.\d{1,3}){3})"\)') {
        $ip = $matches['ip']
    }

    # Поиск кодов устройств
    if ($line -match 'device codes\s+(?<code>\d+)') {
        $code = $matches['code']
        # Добавление уникальной записи
        if (-not $uniqueDevices.ContainsKey($code)) {
            $uniqueDevices[$code] = $ip
        }
    }

    # Подсчет TX и RX
    if ($line -match '\[(\d+)\]\s+(TX)') {
        $txCount++
    }
    elseif ($line -match '\[(\d+)\]\s+(RX)') {
        $rxCount++
    }
}

# Вывод результата
Write-Host "Уникальные устройства и их IP-адреса:"
foreach ($device in $uniqueDevices.Keys) {
    Write-Host "Код устройства: $device, IP-адрес: $($uniqueDevices[$device])"
}

Write-Host "Общее количество TX: $txCount"
Write-Host "Общее количество RX: $rxCount"

Шаг 3: Запуск и тестирование

  1. Убедитесь, что лог-файл доступен по заданному пути.
  2. Сохраните скрипт в файл с расширением .ps1 и запустите его в PowerShell.
  3. Посмотрите на вывод: вы должны получить список уникальных устройств с их IP, а также общее количество TX и RX сообщений.

Заключение

Используя шаги, описанные в данной инструкции, вы сможете эффективно парсить лог-файлы в PowerShell, извлекать необходимые данные и минимизировать повторения. Если требуется дальнейшая помощь или разработка более сложных запросов, не стесняйтесь обращаться за консультацией.

Оцените материал
Добавить комментарий

Капча загружается...