2014-04-04 90 views
0

我有一個這樣的文件:計數重複次數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 

回答

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 
+0

謝謝@mjolinor!完美的作品,我可以只顯示大於2嗎? – srbob

+1

歡迎您!是的,你可以像這樣只顯示> 2:$ counts.GetEnumerator()|其中{$ _。值-gt 2}。它與使用對象沒有多大區別,只需在散列表上使用.getenumerator()方法即可。發佈的組對象解決方案也可以工作。我傾向於使用散列表方法來存儲文件數據,因爲如果它得到一個非常大的文件,它似乎可以更好地擴展。 – mjolinor

0
$stat = @{}; 
cat file.txt | % { $stat["$_"] = $stat["$_"] + 1; } 
$stat; 
2
Get-Content .\file.txt | Group-Object | Select-Object name, count 
+0

你可以堅持一個'|上月底英尺-a'爲好。 – Duncan

1

要做到這一點最簡單的方法可能是:

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選項groupGroup-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