2010-05-05 42 views
1

我有數據或對象的幾行的變量結果($結果)是這樣的:PS:只將最大值作爲輸出過濾所選行?

PS> $result | ft -auto; 
name value 
---- ----- 
a   1 
a   2 
b   30 
b   20 
.... 

什麼,我需要得到的名字和max(值)的所有行這樣的濾波輸出:

PS> $result | ? |ft -auto 
name value 
---- ----- 
a   2 
b   30 
.... 

不知道什麼命令或過濾器可用(如上面的?),以便我可以獲取每個名稱,只有名稱的最大值?

回答

3

這應該做的伎倆:

PS> $result | Foreach {[email protected]{}} ` 
         {if ($_.Value -gt $ht[$_.name].Value) {$ht[$_.Name]=$_}} ` 
         {$ht.Values} 

這實質上使用開始/過程/在Foreach對象cmdlet藏匿輸入完腳本塊參數與基於鑰匙插入一個哈希表中的最大值對象。

注意:注意行後續字符(`)之後的額外空格 - 不應該有任何空格。

+0

在我的Q中通過使用散列表的很好的解決方案。我的Q實際上是一個簡化的。不知道這個S是否適用於具有附加列(名稱,值,標籤,...)的情況。 – 2010-05-06 03:13:21

+0

這取決於。如果您可以「鍵入」單個列名稱以測試最大值,那麼它應該可以正常工作。請記住,哈希表存儲原始對象,以便保留所有字段。 – 2010-05-06 15:44:33

3

$結果|組名稱|選擇名稱,@ {n ='value'; e = {($ _。group | measure value -max).maximum}}