【问题标题】:Compare two csvs with powershell and take value from one into other将两个 csvs 与 powershell 进行比较,并将值从一个带入另一个
【发布时间】:2020-06-15 04:27:02
【问题描述】:

我在 powershell 中有两个 CSV,我试图从中提取数据并将其放入 csv。例如: 带有First、Last、Email 的contacts.csv mailinglist.csv 包含 First、Last、Email

MailingList 邮箱为空,我需要从contacts.csv 中提取邮箱地址

Mailinglist 有一些(但不是全部)联系人作为contacts.csv。我只需要为 Mailinglist.csv 中匹配的行从contacts.csv 中提取电子邮件地址

到目前为止我有:


    $contacts = Import-Csv .\contacts.csv
    $mailing = Import-Csv .\mailing.csv

    $compare = $mailing | select $_ | $_ -notcontains $contacts
    $email = $contacts | Select $_ | Where { $_ -contains $compare }

$compare 给了我正确的第一列和最后一列。正确的是它只返回匹配 $mailing 的值,而不是其他任何值。

$email 变量返回为空。

帮助?我有一个包含 850 条记录的电子表格,我真的不想手动操作...

【问题讨论】:

  • -notcontains 更改为-notin 并将-contains 更改为-in,或者交换变量。

标签: windows powershell csv compare


【解决方案1】:

以下是使用Compare-Object的解决方案。

Compare-Object $contacts $mailing -Property First,Last -IncludeEqual -ExcludeDifferent -PassThru |
select * -ExcludeProperty SideIndicator

【讨论】:

    【解决方案2】:

    您要查找的内容称为“左连接”。尝试四处搜索连接(可能 Join-Object 的这个很好的解释将帮助你弄清楚你需要什么)在 Powershell 中,你应该找到一些适用的例子。 有几种连接类型,例如“inner join”和“左/右连接”。

    Powershell 没有用于加入的强大内置函数,因此您可能需要一两个小函数。

    只是通过查看您的代码,您可能想尝试更改: Where { $_ -contains $compare }

    到: Where { $compare -contains $_ }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 2019-04-20
      相关资源
      最近更新 更多