我有两个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行的序列号/地址
答案 0 :(得分:1)
使用Import-Csv
将第一个文件读入第二个变量。
$a = Import-Csv 'a.csv' -Delimiter ';'
读取第二个文件并展开address字段,以便获得仅包含值的数组。将其分配给另一个变量。
$b = Import-Csv 'b.csv' | Select-Object -Expand 'address'
检查$a
中address
字段与$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 ';'