Powershell在一个CSV文件中查找,在另一个CSV文件中删除

时间:2018-08-29 08:56:20

标签: powershell csv

我有两个CSV文件,a.csv有

serial;address
45ADSAWR;B468ASDAS678
41ADGASR;1467ASSAS276
....

b.csv文件具有

address
B234ASDGASD5
A454SGKIASD6
.....

我想做的是读取b.csv文件中的地址,并删除a.csv文件中具有相同地址的行

a.csv文件有380行,b.csv文件有50行,因此,当脚本创建c.csv文件时,它将具有330行的序列号/地址

1 个答案:

答案 0 :(得分:1)

使用Import-Csv将第一个文件读入第二个变量。

$a = Import-Csv 'a.csv' -Delimiter ';'

读取第二个文件并展开address字段,以便获得仅包含值的数组。将其分配给另一个变量。

$b = Import-Csv 'b.csv' | Select-Object -Expand 'address'

检查$aaddress字段与$b中的值不匹配的记录。将结果导出回CSV。

$a | Where-Object {
    $b -notcontains $_.address
} | Export-Csv 'c.csv' -Delimiter ';'

为了获得更好的性能,请使$b成为哈希表而不是数组

$b = @{}
Import-Csv 'b.csv' | ForEach-Object {
    $b[$_.address] = $true
}

,并使用哈希表查找来检查地址是否存在。

$a | Where-Object {
    -not $b.ContainsKey($_.address)
} | Export-Csv 'c.csv' -Delimiter ';'
相关问题