Сравните два CSV-файла с PowerShell и принять значение от одного в другой - PullRequest
0 голосов
/ 02 марта 2020

У меня есть два CSV в PowerShell, из которых я пытаюсь извлечь данные и поместить их в CSV. Например: contacts.csv с First, Last, Email mailinglist.csv с First, Last, Email

Почта MailingList пустое, и мне нужно извлечь адреса электронной почты из contacts.csv

Список рассылки содержит некоторые, но не все контакты, как contacts.csv. Мне нужно вытащить адреса электронной почты из contacts.csv только для тех строк, которые совпадают в Mailinglist.csv

Пока что у меня есть:


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

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

$. Сравнение дает мне правильное значение. Сначала и последние столбцы. Правильно то, что он возвращает только значения, соответствующие $ mailing, а не что-нибудь еще.

Переменная $ email возвращается пустым.

Справка? У меня есть электронная таблица с 850 записями, которую я действительно не хотел бы делать вручную ...

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Ниже приведено решение с использованием Compare-Object.

Compare-Object $contacts $mailing -Property First,Last -IncludeEqual -ExcludeDifferent -PassThru |
select * -ExcludeProperty SideIndicator
1 голос
/ 03 марта 2020

То, что вы ищете, называется «левым соединением». Попробуйте поискать объединение (возможно, это хорошее объяснение из Join-Object поможет вам выяснить, что вам нужно) в Powershell, и вы найдете несколько подходящих примеров. Существует несколько типов объединений, таких как « внутреннее объединение » и «левое / правое объединение».

Powershell не имеет великолепных встроенных функций для объединения, поэтому вы Скорее всего, вам понадобится небольшая функция или две.

Просто взглянув на свой код, вы можете попробовать изменить: Where { $_ -contains $compare }

На: Where { $compare -contains $_ }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...