我有一个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
型
2条答案
按热度按时间oyxsuwqo1#
首先使用
Group-Object
按SubName
属性分组,然后对每个组使用Sort-Object
按Rank
排序(表达式$_.Rank -replace '\D' -as [int]
删除任何非数字位,然后将结果字符串转换为整数以进行正确排序),最后使用Select-Object
只取一个对象,跳过其余的:字符串
**注意:**如果
Rank
属性中的值总是个位数,则可以使用Sort-Object Rank
。xcitsw882#
尝试:
字符串
结果
型