【问题标题】:Powershell to look in one CSV file to remove in another CSV filePowershell 在一个 CSV 文件中查找以在另一个 CSV 文件中删除
【发布时间】:2018-08-29 08:56:20
【问题描述】:

我有两个 CSV 文件,一个.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 行序列/地址

【问题讨论】:

标签: powershell csv


【解决方案1】:

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

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

读取第二个文件并展开地址字段,因此您会得到一个仅包含值的数组。将其分配给另一个变量。

$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 ';'

【讨论】:

  • 啊,是的,现在我明白了。我只是稍微编辑了代码,现在我得到了我需要的信息。当然,我可以使用数组来读取信息,然后在循环比较中并同时写入 c.csv。为什么我没有想到这一点。 AHHHH我累了,需要去吃饭,非常感谢你
猜你喜欢
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多