我有一個這樣的文件:計數重複次數Powershell的
CONTOSO-A\AAA
CONTOSO-B\BBB
CONTOSO-B\CCC
CONTOSO-A\AAA
....
....
怎麼能算每行獲得:
CONTOSO-A\AAA - 2
CONTOSO-B\BBB - 1
CONTOSO-B\CCC - 1
我有一個這樣的文件:計數重複次數Powershell的
CONTOSO-A\AAA
CONTOSO-B\BBB
CONTOSO-B\CCC
CONTOSO-A\AAA
....
....
怎麼能算每行獲得:
CONTOSO-A\AAA - 2
CONTOSO-B\BBB - 1
CONTOSO-B\CCC - 1
我會使用一個哈希表:
$counts = @{}
Get-Content c:\somedir\somefile.txt |
foreach { $counts[$_]++ }
$counts
Name Value
---- -----
CONTOSO-A\AAA 2
CONTOSO-B\CCC 1
CONTOSO-B\BBB 1
$stat = @{};
cat file.txt | % { $stat["$_"] = $stat["$_"] + 1; }
$stat;
要做到這一點最簡單的方法可能是:
PS C:\temp> @"
CONTOSO-A\AAA
CONTOSO-B\BBB
CONTOSO-B\CCC
CONTOSO-A\AAA
"@ | set-content test.txt
get-content test.txt | group -NoElement
Count Name
----- ----
2 CONTOSO-A\AAA
1 CONTOSO-B\BBB
1 CONTOSO-B\CCC
使用-NoElement
選項group
或Group-Object
意味着你不必單獨做select
提取只是名稱和數量。
爲了得到你要的確切格式:
PS C:\temp> get-content test.txt | group -NoElement | % { $_.Name +" - "+$_.Count }
CONTOSO-A\AAA - 2
CONTOSO-B\BBB - 1
CONTOSO-B\CCC - 1
謝謝@mjolinor!完美的作品,我可以只顯示大於2嗎? – srbob
歡迎您!是的,你可以像這樣只顯示> 2:$ counts.GetEnumerator()|其中{$ _。值-gt 2}。它與使用對象沒有多大區別,只需在散列表上使用.getenumerator()方法即可。發佈的組對象解決方案也可以工作。我傾向於使用散列表方法來存儲文件數據,因爲如果它得到一個非常大的文件,它似乎可以更好地擴展。 – mjolinor