根据两列从 CSV 文件中删除重复项

问题描述 投票:0回答:1

我有一个包含三列的 CSV(在

$inputCsv
中),我想从中删除 SubName 中的重复项,同时保留最小排名类别(最小值 = TEST1 和最大值 = TEST3)

Name     SubName     Rank
-----    --------    -----
NAME1    SUBNAME1    TEST1
NAME2    SUBNAME2    TEST1
NAME2    SUBNAME2    TEST3
NAME3    SUBNAME3    TEST2
NAME4    SUBNAME4    TEST3
NAME4    SUBNAME4    TEST2

想要的结果:

Name     SubName     Rank
-----    --------    -----
NAME1    SUBNAME1    TEST1
NAME2    SUBNAME2    TEST1
NAME3    SUBNAME3    TEST2
NAME4    SUBNAME4    TEST2

当然可以保留 TEST3,以防它是唯一可用的值。

为了方便起见,我将

Rank
转换为数字列,以便我可以订购它。我尝试了几个
Sort-Object
组件但没有成功,例如:

$inputCsv | Select-Object "Name", "SubName", "Rank", @{Name = 'Weight'; Expression = { 
    if ( $_."Rank" -eq "TEST1" ) { 1 } 
    elseif ( $_."Rank" -eq "TEST2" ) { 2 } 
    elseif ( $_."Rank" -eq "TEST3" ) { 3 } }
} | Sort-Object "SubName",{$_.Weight -lt 3} -Unique
powershell csv sorting duplicates
1个回答
0
投票

首先使用

Group-Object
SubName
属性分组,然后对每个组使用
Sort-Object
Rank
排序(表达式
$_.Rank -replace '\D' -as [int]
删除任何非数字数字,然后将结果字符串转换为整数以进行正确的排序)排序)最后使用
Select-Object
仅获取 1 个对象并跳过其余对象:

$inputCsv | Group-Object SubName | ForEach-Object {
    $_.Group |
        Sort-Object { $_.Rank -replace '\D' -as [int] } |
        Select-Object -First 1
}
© www.soinside.com 2019 - 2024. All rights reserved.