Как сравнить два CSV-файла и найти разницу с помощью PowerShell - PullRequest
0 голосов
/ 09 января 2012

У меня есть два CSV-файла, я хочу сравнить оба файла и найти разницу. Содержит user_id

Я пытался сравнить объект, diff, но не смог достичь.

как

AD_Users.csv

Oracle_Users.csv

оба содержат идентификатор пользователя, вывод должен быть как

Пользователь AD не существует в Oracle

Пользователь Oracle не существует в AD

напр. - K9988484 J8485888

Я пытался сравнить объект, diff, но не смог достичь.

Ответы [ 2 ]

0 голосов
/ 09 января 2012

Предполагается, что ваши CSV-файлы выглядят так:

# contents of ad.csv
user_id,field1,field2
useronlyad,value1,value2
userboth,value3,value4

и это:

# contents of oracle.csv
user_id,field1,field2
useronlyoracle,value1,value2
userboth,value3,value4

Вы можете получить пользователей рекламы, которые не являются пользователями-оракулами, как это (заимствуя New-HashSetот Джош Эйнштейн ):

# to return all ad users that are not oracle users
import-module .\Scripting.psm1
$ad_hashset = new-hashset string
$oracle_hashset = new-hashset string
import-csv .\ad.csv | ForEach-Object {$ad_hashset.add($_.user_id)}
import-csv .\oracle.csv | ForEach-Object {$oracle_hashset.add($_.user_id)}
$ad_hashset.ExceptWith($oracle_hashset)
$ad_hashset # will return useronlyad

Точно так же вы можете получить пользователей оракула, которые не являются такими пользователями рекламы, как

# to return all ad users that are not oracle users
import-module .\Scripting.psm1
$ad_hashset = new-hashset string
$oracle_hashset = new-hashset string
import-csv .\ad.csv | ForEach-Object {$ad_hashset.add($_.user_id)}
import-csv .\oracle.csv | ForEach-Object {$oracle_hashset.add($_.user_id)}
$oracle_hashset.ExceptWith($ad_hashset)
$oracle_hashset # will return useronlyoracle

Краткое объяснение того, как это работает:

  1. Создание двух коллекций (хэш-наборов)
  2. Заполнение хэш-наборов данными, найденными в соответствующих CSV
  3. Удаляет все элементы ввторая коллекция из первой коллекции
0 голосов
/ 09 января 2012

Pretty Diff будет преобразовывать файлы CSV в более удобный для чтения формат для вывода, но он не работает на CLI. Обязательно измените настройку языка по умолчанию на CSV, иначе она не будет выводиться так, как вы ожидаете. Этот инструмент позволяет любому другому символу быть разделительным символом вместо принудительного наложения запятой.

http://prettydiff.com/

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