Powershell对两个字段进行排序,然后从CSV获取最新信息

时间:2018-11-15 17:27:46

标签: powershell sorting unique

我正在尝试找到一种方法,可以按两个字段对CSV排序并仅检索最新的项目。

CSV字段:时间,计算机,类型,域。

有效的项目在下方,但由于CSV的规模而变慢,我觉得有更好的方法。

$sorted = $csv | Group-Object {$_.computer} | ForEach {$_.Group | Sort-Object Time -Descending | Select-Object -First 1}

1 个答案:

答案 0 :(得分:0)

正如Lee_Dailey所建议的那样,使用hashtable可能会带来更好的运气,相反,Group-Object(除非与-NoElement参数一起使用)非常慢且需要大量内存。

最快的方式是这样的:

# use the call operator & instead of ForEach-Object to avoid overhead from pipeline parameter binding
$csv |&{
  begin{
    # create a hashtable to hold the newest object per computer 
    $newest = @{}
  }
  process{
    # test if the object in the pipeline is newer that the one we have
    if(-not $newest.ContainsKey($_.Computer) -or $newest[$_.Computer].Time -lt $_.Time){
      # update our hashtable with the newest object
      $newest[$_.Computer] = $_
    }
  }
  end{
    # return the newest-per-computer object
    $newest.Values
  }
}