2016-01-07 172 views
-1

這顯示記錄使用特定供應商的許可證的.log文件的內容。從日誌可以例如看到當前USERNAME_1使用許可證1,2,3 &從LOG/TXT文件創建輸出

14:22:49 (VENDOR) OUT: "License_1" [email protected] 
14:22:49 (VENDOR) OUT: "License_2" [email protected] 
14:22:49 (VENDOR) OUT: "License_3" [email protected] 
14:22:49 (VENDOR) OUT: "License_1" [email protected] 
14:22:49 (VENDOR) OUT: "License_2" [email protected] 
14:22:49 (VENDOR) OUT: "License_3" [email protected] 
14:22:49 (VENDOR) OUT: "License_1" [email protected] 
14:46:32 (VENDOR) OUT: "License_2" [email protected] 
14:46:32 (VENDOR) OUT: "License_3" [email protected] 
14:47:40 (VENDOR) OUT: "License_3" [email protected]

我想創建一個輸出顯示有多少每個許可的正在使用中,排除所有不必要的數據。我設想是這樣的:

License_1: 3 
License_2: 3 
License_3: 4
+2

所以我們不建議你認識的東西不起作用,到目前爲止你嘗試了什麼?除非你指定,否則你的問題是[off-topic](http://stackoverflow.com/help/on-topic)。 –

回答

2

假設許可證是在雙引號,你可以使用正則表達式,像這樣的唯一元素:

Select-String YourFile.log -Pattern '(?<=")[^"]+(?=")' | % { 
    $_.Matches.value 
} | Group-Object | % {"$($_.name): $($_.count)"} 
+0

謝謝你的回答,戴夫。許可證是雙引號中唯一的元素,所以它的功能就像魅力一樣。 –

+1

很酷,如果我的答案適合你,那麼不要忘記將它標記爲例外答案。 –

+0

您應該提出另一個問題,不要編輯您的原始問題,否則在查看此問題時給出的答案對其他人無意義。 –

1

如果你的日誌始終看起來是一樣的,並用[空格]隔開,那麼你可以使用這個簡單的操作:

$log = Get-Content C:\yourlog.txt 
$Array = @() 
Foreach ($line in $log) 
{ 
    $Result = "" | Select Time,Vendor,"IN/OUT",License,Username 
    $Split = $line -split '\s' | ? {$_} 
    $Result.Time = ($Split)[0] 
    $Result.Vendor = ($Split)[1] 
    $Result."IN/OUT" = ($Split)[2] 
    $Result.License = ($Split)[3] 
    $Result.Username = ($Split)[4] 
    $Array += $Result 
} 

然後你就可以顯示所有的許可證特定用戶:

$Array | ? {$_.Username -eq '[email protected]'} | Select -Expand License 
2

使用-replace操作來提取日誌文件內容的許可證子Dave Sexton's答案的一個變化:

(Get-Content 'C:\path\to\your.log') -replace '.*"(license_\d+)".*','$1' | 
    Group-Object | 
    Select-Object Name, Count 

這會給你以表格形式許可數。你可以管成Format-Table,使其更緊湊:

... | Format-Table -AutoSize 

如果你從你的問題比較喜歡自定義格式,你可以使用format operator-f)是這樣的:

... | ForEach-Object { '{0}: {1}' -f $_.Name, $_.Count }