PS:过滤选定的行只有最大值作为输出?

时间:2010-05-05 23:09:46

标签: powershell

我有几行数据或对象的变量结果($ result),如下所示:

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
....

不确定可用的命令或过滤器(如上所述),以便我可以获取每个名称并仅输出名称的最大值?

2 个答案:

答案 0 :(得分:3)

这应该可以解决问题:

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

这实质上是使用Foreach-Object cmdlet的Begin / Process / End scriptblock参数将输入对象存储为基于密钥的最大值到哈希表中。

注意:在行继续符(`)之后注意多余的空格 - 不应该有任何空格。

答案 1 :(得分:3)

$ result |组名|选择名称,@ {n ='value'; e = {($ _。group | measure value -max).maximum}}