2016-04-04 2 views
1

Как прочитать файл журнала для получения ключевого слова сбой и отметка времени с даты, а затем распечатать его до csv?Powershell, помогите прочитать файл журнала, чтобы получить конкретные ключевые слова

пример: У меня есть файл test.txt, содержащий

20160201-00:00:00 Success .. 
20160201-11:11:11 Fail.. 

Я хочу, чтобы отчет, показывающий для всех терпит неудачу

Date   Time  Result 
---------- 
20160201  11:11:11 Fail 

Благодарим Вас за помощь!

+0

Покажите нам, что вы попробовали, то мы более чем рады помочь направить вас в правильном направлении. – nkasco

ответ

0

Сначала вам нужно прочитать текстовый файл, используя командлет Get-Content. Для разбора журналов, можно использовать следующую Regex (Demo):

(\d{8})-(\d{2}:\d{2}:\d{2})\s+(\w+) 

В следующем примере я перебирать матчи с помощью Foreach-Object Командлет (псевдоним %) и создать новый объект с заданными свойствами. Для фильтрации только сообщений Fail вы можете использовать командлет Where-Object (alias Where). Для преобразования объекта в CSV, вы можете использовать команду: Export-CSV

$content = Get-Content 'C:\Yourpathto\test.txt' 
$regex = '(\d{8})-(\d{2}:\d{2}:\d{2})\s+(\w+)' 
[regex]::Matches($content, $regex) | % { 
    [PSCustomObject]@{ 
      Date = $_.Groups.Value[1] 
      Time = $_.Groups.Value[2] 
      Result = $_.Groups.Value[3] 
      } 
} | Where Result -eq 'Fail' | Export-Csv -Path c:\test.csv 
+0

По какой-то причине я получаю пустой файл. Просто, чтобы сделать это легко, вот что я имею в test.txt. 20160401-01: 10: 00 УСПЕХ 20160401-01: 10: 00 Нормально 20160401-01: 10: 00 УСПЕХ 20160401-01: 10: 00 Нормально ... –

+0

это работает для меня, я получаю желаемый результат .. Вы получили какую-либо ошибку? –

+0

Спасибо! Он работает. У меня проблемы с Regex. :) ценю вашу помощь. –

0

Что-то вроде:

(gc log.txt) -match 'fail' | % { 
    $_ -match '^([^ ]+)(.+)' 
    $matches[1] + ',' $matches[2] | out-file -Append out.csv 
} 

Это очень близко к тому, что вы хотите, вам просто нужно отполировать его немного.

+3

Перед тем, как мы ответим, OP должен показать хотя бы какое-то усилие. Вероятно, рядом с этим заголовком, возможно, будет близнеца, что может реально помочь. Это читается как вопрос о кодах. Если пользователь действительно новый, вы должны избегать использования псевдонимов, когда пытаетесь показать людям, что делать. Вы также не объясняете, как это работает. – Matt

+0

Если он новый, его лучше использовать псевдонимы, а затем нет псевдонимов. Posh aliases не являются случайными словами, но имеют историю в мире linux, вероятность выше, чем он будет знать о 'ls', а затем' get-childitem'. OP также должен знать, как читать код, иначе его бессмысленно. Я не хочу объяснять тривиальный код. – majkinetor

Смежные вопросы