Я пытаюсь извлечь набор данных из некоторых (больших) текстовых файлов. По сути, каждая строка выглядит примерно так:
2011-12-09 18:20:55, ABC.EXE[3b78], The rest of the line...
Я хотел бы получить дату и бит между фигурными скобками (идентификатор процесса), а затем составить таблицу. Второй этап задачи состоит в том, чтобы сгруппировать эту таблицу так, чтобы я получил самую раннюю дату для каждого идентификатора процесса, фактически давая мне дату и время первой записи журнала для идентификатора процесса, которые, как мы надеемся, будут приближаться ко времени начала этого экземпляра. процесса.
Что у меня есть (разделить на другую строку для удобства чтения)
gci -filter *.log -r
| select-string '(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}), ABC.EXE\[(.{4})'
| % { $_.matches } | % { $_.groups } | % { $_.value }
выплевывает захваченные. Я хотел бы проигнорировать первый захват и объединить второй и третий в одной строке.
Помощь?
Пожалуйста?
Редактировать: DOH! Не могу ответить на свой вопрос. Итак ...
Хорошо, я думаю, что я на правильном пути. ТАК вопрос здесь помог мне получить отдельные детали, которые я хотел, а именно:
$_.matches[0].groups[1].value, $_.matches[0].groups[2].value
Затем в статье MSDN здесь показано, как «объединить» биты в объект, что позволяет группировать / сортировать / манипулировать им. Конечный результат
gci -filter *.log | select-string '(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}), ABC.EXE\[(.{4})'
| % { new-object object
| add-member NoteProperty Name $_.matches[0].groups[1].value -passthru
| add-member NoteProperty PId $_.matches[0].groups[2].value -passthru }
Весьма грязно, поэтому, если кто-нибудь знает более чистый способ сделать это, пожалуйста, дайте мне знать.