2012-01-09 101 views
0

我有兩個的CSV文件,我想比較這兩個文件,並找到difference.It包含USER_ID如何比較兩個CSV文件,並使用PowerShell

我比較對象,DIFF嘗試,但未能實現找到差異。

AD_Users.csv

Oracle_Users.csv

既包含用戶ID,輸出應該是這樣

AD用戶沒有在甲骨文

Oracle用戶確實存在不存在於AD

例如 - K9988484 J8485888

我試着與比較對象,差異但無法實現。

+2

您能否發佈您的CSV文件的示例,包括標題和一些數據嗎? – 2012-01-09 16:22:47

+3

此外,您嘗試使用Compare-Object的命令... – 2012-01-09 16:30:53

+1

爲什麼必須使用Powershell?爲什麼像Beyond Compare這樣的專用文件比較器不可接受? – 2012-01-09 17:29:14

回答

-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用戶這樣的廣告的用戶(借新-HashSet from Josh Einstein):

# 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 

簡要說明 oracle的用戶:

  1. 創建兩個集合(hashsets)
  2. 使用在相應CSV中找到的數據填充哈希集合
  3. 從第一列中刪除第二個集合中的所有元素lection
+0

嗨,喬恩,我不知道它爲什麼downvote,我試過上面的腳本,但問題是我沒有在兩個文件中獲得任何輸出。 – Naveen 2012-01-11 08:42:12

+0

@Naveenk我已經修改了這些示例以使用字段名user_id處理csv文件(如您在問題中所述) – 2012-01-12 15:21:33

0

漂亮的差異將不同CSV文件在輸出更容易閱讀的格式,但它不適用於CLI。請務必將默認語言設置更改爲CSV,否則將不會像您期望的那樣輸出。該工具允許任何其他角色成爲分隔角色,而不是強制使用逗號。

http://prettydiff.com/

+0

我不想使用任何工具,只有PowerShell,因爲我必須修改一些現有的腳本 – Naveen 2012-01-11 08:43:40