Поиск и группировка из лог-файла

powershell full-text-search grouping logfile-analysis

43 просмотра

2 ответа

У меня есть лог-файл со многими записями. Некоторые из них начинаются с даты, другие нет. Я хочу найти все записи с этого / прошлого месяца "UpgradeResource] part: 3-V12345678-12-"в строке и подсчитать результаты, сгруппированные по ячейкам. На самом деле есть 9 коробок, считая от 1 до 9, но если мы купим другую коробку, будет 10 или 11 ... за счетчиком ящиков всегда следует -1 в конце строки.

Строки, которые я ищу, выглядят так:

2016-04-27 11: 49: 43,895 INFO [ajp-apr-8009-exec-9] [com.xxx.shared.yyy.UpgradeResource] часть: 3-V12345678-12-5-245, поле: 3-V12345678 -38-3-1
...
2016-04-27 11: 49: 43,895 INFO [ajp-apr-8009-exec-9] [com.xxx.shared.yyy.UpgradeResource] часть: 3-V12345678-12-4-112, поле: 3-V12345678 -38-1-1

Мой результат должен быть:

Месяц 03/2016:
Коробка 1: 10 раз
Коробка 2: 123 раза
Коробка 3: 65 раз

Месяц 04/2016:
Коробка 1: 75 раз
Коробка 2: 13 раз
Коробка 3: 147 раз

Я не очень тверд в использовании powershell и пробовал это, но получаю ошибки и думаю, что я не на правильном пути:

$inputfile = "C:\temp\result.txt"
$matchstring = "(?\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}).*UpgradeResource] part: 3-V12345678-12-(?.*?), box: 3-V12345678-38-(\d{1})-1"
Get-Content $inputfile | foreach { 
    if ($_ -match $matchstring) {
        "" | select @{n='Date';e={$matches.date}},@{n='Key';e={$matches.Key}},@{n='PD';e={$matches.PD}}
    }
}

Ошибка, которую я получаю:

"(? \ d {4} - \ d {2} - \ d {2} \ d {2}: \ d {2}: \ d {2}). * UpgradeResource] часть:
3-V12345678-12 - (?. *?), Поле: 3-V1001686-38 - (\ d {1}) - 1 "wird analysiert -
Unbekanntes Gruppierungskonstrukt.
В C: \ temp \ count.ps1: 16 Zeichen: 6
+ if ($ _ -match $ matchstring)
+ ~~~~~~~~~~~~~~~~~~~~~~
     + CategoryInfo: OperationStopped: (:) [], ArgumentException
     + FullyQualifiedErrorId: System.ArgumentException
Автор: marchusar Источник Размещён: 30.10.2019 08:58

Ответы (2)


0 плюса

Решение

Ошибка, которую вы получаете, заключается в том, что (?...)она не является допустимой конструкцией группировки. Если вы хотите использовать именованные группы (что предполагает остальная часть вашего кода), после вопросительного знака должно следовать имя группы в угловых скобках ( (?<name>...)). Для не захватывающей группы за ней должно следовать двоеточие ( (?:...)).

Смотрите здесь для получения дополнительной информации.

Ваш код должен выглядеть примерно так:

$inputfile   = 'C:\temp\result.txt'
$matchstring = '(?<date>\d{4}-\d{2}-\d{2}) (?<time>\d{2}:\d{2}:\d{2})' +
               '.*UpgradeResource] ' +
               'part: 3-V12345678-12-(?<Key>.*?), ' +
               'box: 3-V12345678-38-(?<PD>\d{1})-1'
Get-Content $inputfile | Where-Object {
  $_ -match $matchstring
} | ForEach-Object {
  New-Object -Type PSObject -Property  @{
    'Date' = $matches.date
    'Time' = $matches.time
    'Key'  = $matches.Key
    'Box'  = 'Box ' + $matches.PD
  }
} | Group-Object Date, Box
Автор: Ansgar Wiechers Размещён: 28.04.2016 10:46

0 плюса

Это подходит?

$inputfile = "C:\temp\result.txt"
$matchstring = "(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}).*UpgradeResource] part: 3-V12345678-12-(.*), box: 3-V12345678-38-(\d{1})-1"

Get-Content $inputfile | foreach { 
if ($_ -match $matchstring) {

    "" | select @{n='Date';e={$matches.1}},@{n='Key';e={$matches.2}},@{n='PD';e={$matches.3}}
}

}

Дает мне этот вывод:

Date                                                    Key                                                     PD                                                    
----                                                    ---                                                     --                                                    
2016-04-27 11:49:43                                     5-245                                                   3                                                     
2016-04-27 11:49:43                                     4-112                                                   1   
Автор: Martin Размещён: 28.04.2016 09:21
Вопросы из категории :
32x32