Как при помощи powershell сравнить 2 csv файла и записать из разницу в 3-й?
Есть 2 csv файла с более чем 3к строк. Структура столбцов у них одинаковая, каждом есть столбцы Name, Surname, Email, Phone и т.д.
Интересует сравнение этих файлов только по столбцу Email и запись не дублирующихся строк в 3-й(желательно с маркировкой в каком файле этот email присутствует, а в каком нет.)
Я очень долго танцевал с Compare-Object, но так и не добился результата. Может что сталкивался с подобной задачей?
В итоге скрипт отрабатывает без ошибок но:
1) Файл "unique_emails.csv" показывает только одну строку с отличием, при чём ту что была последней в файле "mail_old.csv".
2) Все русские имена и фамилии превратились в знаки вопроса.
1 случается из-за отсутствия -append ключа. у него нет значения, он там только для того, чтобы указать команде, что нужно добавлять строки в файл, а не перезаписывать его одной строкой на каждом проходе цикла.
2. попробуйте обновить повершелл до 5.1 ($psversiontable) если он старый. попробуйте ввести ключ -encoding в команду export-csv.
Проблема с Кириллицей решилась, но после добавления ключа -append, другая проблема изменилась. Теперь файл unique_emails.csv точная копия файла "mail_old.csv", даже вес файла в КБ одинаковый.
Верхняя строчка обоих файлов:
"Name";"Surname";"Phone";"DisplayName";"Email"
Не знаю имеет ли значение, но один и тот же email может находится на совершенно разных строчках файлов. Т.е. например user@email.ru может находится на 10 строчке файла "mail_old.csv", а в файле "mail_new.csv" он может находится на 2000-й строчке.
в результирующем файле должны быть все строки, кроме тех двух, что совпадают в обоих файлах.
и я бы все таки посмотрел в сторону compare-object. с ним не так сложно разобраться.
azarij,
Заработало!
Правда этот скрипт показывает только адреса которое есть в *_old, но нет в *_new.
Придется наверно дублировать скрипт меняя местами файлы чтобы получить 2 списка с полной разницей :)