PowerShell脚本:按列去重CSV并保留指定列含特定值的条目
处理CSV去重并保留指定优先级条目
直接用Select-Object -Unique确实搞不定,因为它只会保留每组重复项的第一个,没法按你要的Accessrights优先级筛选。用PowerShell可以这么做:
步骤说明
- 读取CSV文件:用
Import-Csv指定分号分隔符,把CSV内容转成可操作的对象集合 - 分组去重:按
Name和Employeenumber这两个唯一标识字段分组 - 筛选优先级条目:对每个分组,优先保留
Accessrights为Write的条目;如果分组里没有Write,就保留原有的条目 - 导出结果:把处理后的对象集合导出为新的CSV文件
完整代码
# 读取原始CSV(替换为你的文件路径) $csvData = Import-Csv -Path "你的原始文件路径.csv" -Delimiter ';' # 分组处理,保留优先级条目 $processedData = $csvData | Group-Object -Property Name, Employeenumber | ForEach-Object { # 先找分组里Accessrights为Write的条目 $writeEntry = $_.Group | Where-Object { $_.Accessrights -eq 'Write' } if ($writeEntry) { $writeEntry } else { # 没有Write的话,保留分组里的第一个条目 $_.Group[0] } } # 导出处理后的CSV(替换为你的输出路径) $processedData | Export-Csv -Path "处理后文件.csv" -Delimiter ';' -NoTypeInformation
验证结果
用你提供的示例数据测试,运行后会得到期望的结果:
Name;Employeenumber;Accessrights
Max;123456;Write
Berta;133556;Write
Jhonny;161771;ReadOnly
内容的提问来源于stack exchange,提问作者JohannesKr
相关产品推荐
相关产品推荐

