Как использовать Powershell для возврата как имени файла, так и сопоставленного текста в файле - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть список предварительно обработанных файлов журналов, собранных с серверов Mutliple.Они имеют формат CSV, а содержимое файлов журнала имеет формат:

Дата, Время, Значение1, Значение2, Значение3

Я хотел бы объединить один файл с информациейиз имени файла журнала (который имеет имя сервера) и всех дат и времени, когда значение Value1 превышает определенное значение в файлах журнала для дальнейшего анализа.Другими словами, я хотел бы, чтобы ожидаемый результат был:

Имя файла1,2011 / 10 / 01,12: 00: 00.256,2345,210,0 Имя файла1,2011 / 10 / 05,13: 45:36,321,2666,209,0 Имя файла5,2011 / 10 / 09,09: 08: 02,111,2100,180,0 Имя файла20,2011 / 10 / 15,17: 09: 33,256,3019,109,0 ...

Я пытался использовать Powershell + регулярное выражение для извлечения информации.Однако я могу получить только строку, содержащую желаемое значение и имя файла или только дату, время и значение1.Сценарии PowerShell:

select-string -path "C: \ Server \ Logs * .csv" -pattern "([0-9] {4} / [0-9] {1,2}/[0-9]{1,2}),([0-9]{2}:[0-9]{2}:[0-9]{2}).[0-9]{3}, ([2-9] [0-9] {3}) "|select-object -property имя файла, номер белья, строка |export-csv -path highload2.csv

select-string -path "C: \ Server \ Logs * .csv" -pattern "([0-9] {4} / [0-9] {1, 2} / [0-9] {1,2}), ([0-9] {2}: [0-9] {2}:. [0-9] {2}) [0-9]{3}, ([2-9] [0-9] {3}) "|select-object -expand Matches |Foreach {$ .Groups [1] .Value, $ .Groups [2] .Value, $ _. Groups [3] .Value}

Есть ли способ получить результатчто мне нужно?

Спасибо,

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

Если файлы журналов имеют правильный CSV и имеют одинаковую информацию заголовка, вы можете сделать это проще с помощью Import-Csv:

Get-ChildItem c:\server\logs*.csv | Foreach {$f = $_.fullname; Import-Csv $_ | 
    Add-Member NoteProperty LogFilename $f -passthru } | 
    Export-Csv combinedlog.csv
0 голосов
/ 01 ноября 2011

Похоже на ваши однострочные:

select-string -path "C:\Server\Logs*.csv" -pattern "([0-9]{4}/[0-9]{1,2}/[0-9]{1,2}),([0-9]{2}:[0-9]{2}:[0-9]{2}).[0-9]{3},([2-9][0-9]{3}),([0-9]*),([0-9]*)" | select-object -property filename, @{N="Date";E={$_.matches | %{$_.groups[1].value}}}, @{N="Time";E={$_.matches | %{$_.groups[2].value}}}, @{N="Value1";E={$_.matches | %{$_.groups[3].value}}}, @{N="Value2";E={$_.matches | %{$_.groups[4].value}}}, @{N="Value3";E={$_.matches | %{$_.groups[5].value}}} | export-csv -path highload2.csv

Однако, если вы намереваетесь повторно использовать свой код, возможно, вы захотите обработать ваши CSV-файлы, используя import-csv, что должно улучшить читаемость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...