我試圖從一些(大)文本文件中提取一組數據。基本上,每一行看起來是這樣的:獲取powershell正則表達式捕獲到表
2011-12-09 18:20:55, ABC.EXE[3b78], The rest of the line...
我想獲得的日期和括號之間的位(進程ID),然後編譯的表。第二階段的任務是對這個表進行分組,這樣我就可以得到每個進程id的最早日期,實際上給了我每個進程id的第一個日誌條目的日期和時間,它有望接近該實例的開始時間的過程。
到目前爲止我有什麼(拆分到不同的行可讀性)
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!無法回答我自己的問題。所以...
好的,我想我是在正確的軌道上。一個SO質疑here幫我弄的各個部分,我想,即:
$_.matches[0].groups[1].value, $_.matches[0].groups[2].value
然後,MSDN文章here展示瞭如何「叢」中的位爲對象,這使得它能夠被分組/排序/操縱。最終結果
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 }
相當混亂,因此,如果有人知道的更清潔的方式做到這一點,請讓我知道。
太棒了,那就是我想要的東西!我從來沒有遇到Powershell中的switch語句。我喜歡 –
你可以做一個'Get-Help about_switch'。它非常靈活。 – Joey
+1用於New-Object上的-Property開關。 –