我正在处理一个场景,其中我的csv输入文件如下:
名称 | 编号 | 优先级|
---|---|---|
John | ||
Rocky | 345 | 第三[/tr>|
Tony | 234 | 第一个|
Rocky | 345 | 第二次[/tr>|
马特 | 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