如何比较两个csv文件,并使用powershell找到差异

时间:2012-01-09 16:20:37

标签: powershell csv

我有两个csv文件,我想比较两个文件并找到差异。它包含user_id

我尝试使用compare-object,diff但无法实现。

AD_Users.csv

Oracle_Users.csv

都包含用户ID,输出应该像

Oracle中不存在AD用户

AD中不存在Oracle用户

例如 - K9988484       J8485888

我尝试使用compare-object,diff但无法实现。

2 个答案:

答案 0 :(得分:0)

Pretty Diff会以更容易阅读的输出格式区分CSV文件,但它不适用于CLI。请务必将默认语言设置更改为CSV,否则将无法按预期输出。此工具允许任何其他字符作为分隔字符,而不是强制使用逗号。

http://prettydiff.com/

答案 1 :(得分:-1)

假设您的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

您可以获得不是这样的oracle用户的广告用户(从Josh Einstein借用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

同样,您可以获得非此类广告用户的oracle用户

# 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. 创建两个集合(hashsets)
  2. 使用相应CSV
  3. 中的数据填充哈希集
  4. 从第一个集合中删除第二个集合中的所有元素