CSV使用Powershell对行进行分组和筛选



我正在处理一个场景,其中我的csv输入文件如下:

优先级第三[/tr>第一个第二次[/tr>第三第二次
名称 编号
John
Rocky 345
Tony 234
Rocky 345
马特 999 第二次
伯纳德 888
马特 999 第一次
Jacob 789 第二次
Angela 777
Jacob 789 第一个

有很多方法可以做到这一点。由于您的示例恰好都可以按所需顺序排序,我在csv中添加了一行,因此等式中也包含了优先级"第四":

输入.csv

Name,Number,Priority
John,123,Second
Rocky,345,Third
Tony,234,First
Rocky,345,Second
Matt,999,Second
Bernard,888,Third
Matt,999,First
Jacob,789,Second
Angela,777,Second
Jacob,789,First
Angela,777,Fourth

这里有三种方法可以使用:

方法1:创建一个哈希表,其中包含排序的优先级和订单号

$prios = @{
First  = 0
Second = 1
Third  = 2
Fourth = 3
# etc
}
Import-Csv -Path 'D:Testinput.csv' | Group-Object Name | ForEach-Object {
$_.Group | Sort-Object {$prios[$_.Priority]} | Select-Object -First 1
} | Export-Csv -Path 'D:Testoutput.csv' -NoTypeInformation

方法2:按照需要的顺序创建一个具有优先级的字符串数组

$prios = 'First','Second','Third','Fourth'  # etc
Import-Csv -Path 'D:Testinput.csv' | Group-Object Name | ForEach-Object {
$_.Group | Sort-Object {$prios.IndexOf($_.Priority)} | Select-Object -First 1
} | Export-Csv -Path 'D:Testoutput.csv' -NoTypeInformation

方法3:按照需要的顺序创建一个具有优先级的枚举

Enum prios {
First  = 0
Second = 1
Third  = 2
Fourth = 3
# etc
}
Import-Csv -Path 'D:Testinput.csv' | Group-Object Name | ForEach-Object {
$_.Group | Sort-Object {[prios]::($_.Priority)} | Select-Object -First 1
} | Export-Csv -Path 'D:Testoutput.csv' -NoTypeInformation

所有案例在屏幕上显示时的输出:

Name    Number Priority
----    ------ --------
John    123    Second  
Rocky   345    Second  
Tony    234    First   
Matt    999    First   
Bernard 888    Third   
Jacob   789    First   
Angela  777    Second

相关内容

  • 没有找到相关文章

最新更新