我有一个CSV,其中包含以下内容
"STAFF_STATUS","SFKEY","FIRST_NAME","SURNAME","E_MAIL"
"ACTV,"JON1,"JOHN","DOE","[email protected]
"LEFT","JAN1","JANE,"DOE,"[email protected]
"ACTV","STE1,"STEVE,"BEEV",[email protected]
"ACTV,"JON5",JOHN","DOE","[email protected]
我想删除csv中的重复行,但只删除STAFF_STATUS中带有“LEFT”的重复行
我用过下面的powershell,但发现它的准确率约为70%,有时会留下一个“左”重复,并删除“ACTV”重复
$csv1 = '\\Server\c$\Folder\CSVData.csv
$csv1a = Import-Csv $csv1
$csv1b = $csv1a | Sort-Object -Property SURNAME,First_Name -unique
$csv1b | Export-Csv -Path "\\Server\c$\Folder\CSVData(2).csv" -NoTypeInformation
如果我把第三个属性放在sort对象中,它不会删除任何重复的属性。我已经尝试了其他方法,包括一些尝试从聊天,但没有工作,上述是接近我可以得到,但我需要100%的准确性。
1条答案
按热度按时间xdyibdwo1#
我从
Sort-Object
命令中推断出,您认为具有相同姓氏和名字的行是重复的。如果是这样,您可以使用
Group-Object
按共享的姓氏和名字分组,并从每个组中删除状态列中包含LEFT
的行(如果有的话):注意事项:
if ($_.Count -gt 1)
确保只删除LEFT
行 * 和重复行 *;如果您还希望在这些行 * 孤立地 * 出现时删除它们,请删除此条件和else
分支,或者更有效地,因为这相当于 * 无条件地 * 删除LEFT
行-省略ForEach-Object
调用并直接通过管道连接到Where-Object STAFF_STATUS -ne LEFT
E_MAIL
列分组可能是查找重复项的更好方法。