Вопрос или проблема
Пожалуйста, помогите. Есть файл журнала следующего типа
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: Определение регулярных выражений
Нам понадобятся регулярные выражения для поиска нужных данных в лог-файле. Вот основные паттерны:
-
IP-адрес: Для извлечения IP-адреса можно использовать следующее регулярное выражение:
\(""\s*,\s*"(?<ip>\d{1,3}(?:\.\d{1,3}){3})"\)
Это выражение захватывает IP-адрес из строки, содержащей его.
-
Коды устройств: Для нахождения кодов устройств используем:
device codes\s+(?<code>\d+)
Это будет искать строки, содержащие информацию о кодах устройств.
-
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: Запуск и тестирование
- Убедитесь, что лог-файл доступен по заданному пути.
- Сохраните скрипт в файл с расширением
.ps1
и запустите его в PowerShell. - Посмотрите на вывод: вы должны получить список уникальных устройств с их IP, а также общее количество TX и RX сообщений.
Заключение
Используя шаги, описанные в данной инструкции, вы сможете эффективно парсить лог-файлы в PowerShell, извлекать необходимые данные и минимизировать повторения. Если требуется дальнейшая помощь или разработка более сложных запросов, не стесняйтесь обращаться за консультацией.