如何基于多列过滤pscustomobject

时间:2019-03-22 20:19:12

标签: powershell csv filter pscustomobject

我有一个pscustomobject,我想从中删除项目。每个条目包含3个用分号分隔的值。第一个是代码,第二个是日期,第三个是描述。我想创建一个仅包含最新的pscustomobject(用*标记),或从该对象过滤所有较旧的条目。有帮助吗?

$allocationData = get-content $Global:costAllocationFile | sort

942200;20170701;Merk & Design
942200;20171106;Merk & Design
942200;20171207;Merk & Design *
942800;20170102;Formule Management
942800;20170327;Formule Management *
943120;20170102;Unit 4
943120;20170911;Unit 4 & retail
943120;20171207;Unit 4
943120;20180402;Unit 4
943120;20180703;Unit 4 *
943300;20170102;Inkoop
943300;20170130;Inkoop
943300;20170717;Inkoop *

编辑:我忘了提一下,说明可能会随着时间的推移而变化,这说明了我的动机

1 个答案:

答案 0 :(得分:2)

使用Import-Csv代替Get-Content

Import-Csv $Global:costAllocationFile -Delimiter ';' -Header Code,Date,Description 

然后用Group-Object code在组内按日期排序,然后选择最后一个即可

Import-Csv $Global:costAllocationFile -Delimiter ';' -Header Code,Date,Description |
  Group-Object Code | Foreach-Object {
    $_.Group  | Sort-Object Date | Select-Object -Last 1
  }

示例输出:

Code   Date     Description
----   ----     -----------
942200 20171207 Merk & Design *
942800 20170327 Formule Management *
943120 20180703 Unit 4 *
943300 20170717 Inkoop *