使用PowerShell逐行对比CSV相邻行并删除重复行
PowerShell实现CSV相邻行COLUMN B对比筛选(匹配示例需求)
嘿,针对你需要的CSV相邻行对比需求,我整理了一个PowerShell脚本,完全贴合你给出的示例效果——也就是保留每组连续相同COLUMN B的第一行,以及所有和下一行COLUMN B不同的行,最后一行也会直接保留。
需求明确(结合示例)
原CSV数据中,只要当前行的COLUMN B和前一行相同,就删除当前行;如果不同则保留当前行,第一行直接保留。最终实现每组重复B值只留第一行、不同行全留的效果。
完整PowerShell脚本
# 替换为你的输入CSV文件路径 $inputCsvPath = "C:\your\path\input.csv" # 替换为你的输出CSV文件路径 $outputCsvPath = "C:\your\path\output.csv" # 读取CSV数据,转为PowerShell对象数组 $csvData = Import-Csv -Path $inputCsvPath # 初始化结果数组,先加入第一行(必保留) $filteredResult = @($csvData[0]) # 从第二行开始遍历,和前一行对比COLUMN B for ($i = 1; $i -lt $csvData.Count; $i++) { $currentRow = $csvData[$i] $prevRow = $csvData[$i - 1] # 仅当当前行与前一行的COLUMN B不同时,加入结果 if ($currentRow.'COLUMN B' -ne $prevRow.'COLUMN B') { $filteredResult += $currentRow } } # 导出筛选结果到新CSV,避免多余类型信息+UTF8编码兼容 $filteredResult | Export-Csv -Path $outputCsvPath -NoTypeInformation -Encoding UTF8 # 可选:在控制台打印结果,快速验证 Write-Host "筛选完成,结果如下:" $filteredResult
关键细节说明
- CSV读取与处理:
Import-Csv会把CSV转换成可直接操作的对象数组,无需手动拆分字符串,操作列名(比如'COLUMN B')就能获取对应值。 - 筛选逻辑:从第二行开始和前一行对比,不同则保留,自动跳过重复的行——完美匹配示例中删除2A、5C的需求。
- 导出设置:
-NoTypeInformation会去掉PowerShell默认添加的类型头行,-Encoding UTF8确保文件在不同系统下打开不会乱码。
示例验证
用你给出的原数据测试:
原数据:
| COLUMN A | COLUMN B |
|---|---|
| 1 | A |
| 2 | A |
| 3 | B |
| 4 | C |
| 5 | C |
| 6 | A |
运行脚本后,输出结果完全符合期望:
| COLUMN A | COLUMN B |
|---|---|
| 1 | A |
| 3 | B |
| 4 | C |
| 6 | A |
内容的提问来源于stack exchange,提问作者Avivi
相关产品推荐
相关产品推荐

