2016-01-22 41 views
0

我有兩個CSV中,第一個被格式化的是這樣的:合併的CSV,匹配列具有不同格式

 
Campus ID,Student ID,Grade,Last Name,First Name,Active 
1,50000,12,TEST,USER,1 
1,600000,12,EXAMPLE,USER,1

然後我需要合併的另一個CSV:

 
Name,E-Mail Address 
User Test,[email protected] 
User Example,[email protected]

我需要合併或創建一個新的CSV,將第一個CSV中的姓氏和名字列與第二個姓名列中的姓名列進行匹配,然後再添加一個包含匹配用戶電子郵件地址的列。我不需要保留第二個CSV中的名稱。

例如,結果是這樣的:

 
Campus ID,Student ID,Grade,Last Name,First Name,Active,Email 
1,50000,12,TEST,USER,1,[email protected] 
1,600000,12,EXAMPLE,USER,1,[email protected]

我使用PowerShell想這一點,並能夠獲得額外的列,但名稱,因爲它們是在不同的格式相匹配是有點太多了。我不需要PowerShell,如果它能更好地工作,我可以使用其他的東西。

+4

如果這是一次性的過程中,我會使用Excel。在Worksheet 1中打開文件1並創建第二個文件可以鍵入的名稱字段,在Worksheet 2中打開文件2,然後在具有更多記錄的表單中創建組合文件。使用排序和VLOOKUP。然後返回並手動處理所有名字重複的學生。如果你需要這是一個自動化的過程,那麼你就被搞砸了。名字是無處獨特的,足以成爲一把鑰匙。 –

+2

要跟進@BaconBits評論...他對重複的流程是正確的。如果它不是一次性的過程,那麼你就有一個真正的問題,因爲你永遠不會根據名字得到好的匹配。有太多重複的名字,暱稱,拼寫變化等情況。我會在名稱上進行一次性匹配,但我拒絕那些需要我加入人名姓名數據源併發回這些請求的工作到繪圖板。 –

+0

這是一次性交易。我可以處理重複,學生不多。 – narcoleptic

回答

0

下面是一個解決方案,但我永遠不會使用它,因爲如果多個用戶具有相同的名稱,它只會選擇第一個匹配項。而一個變化(錯誤或中間名)會打破它。

<# Sample One 
$one = @" 
Campus ID,Student ID,Grade,Last Name,First Name,Active 
1,50000,12,TEST,USER,1 
1,600000,12,EXAMPLE,USER,1 
"@ | ConvertFrom-Csv 
#> 

$one = Import-Csv SampleOne.csv 

<# Sample two 
$two = @" 
Name,E-Mail Address 
User Test,[email protected] 
User Example,[email protected] 
"@ | ConvertFrom-Csv 
#> 

$two = Import-Csv SampleTwo.csv 

$three = $one | ForEach-Object { 
    $name = $_."First Name" + " " + $_."Last Name" 
    $email = $two | Where-Object { $_.Name -eq $name } | Select-Object -First 1 -ExpandProperty "E-Mail Address" 
    $_ | Add-Member -MemberType NoteProperty -Name Email -Value $email -PassThru 
} 

$three | 
Select-Object "Campus ID","Student ID","Grade","Last Name","First Name","Active","Email" | 
Export-Csv -Path Out.csv -NoTypeInformation 

輸出:

"Campus ID","Student ID","Grade","Last Name","First Name","Active","Email" 
"1","50000","12","TEST","USER","1","[email protected]" 
"1","600000","12","EXAMPLE","USER","1","[email protected]" 
+0

我用這個,它工作得很好。只有少數它無法匹配,但手動匹配它們不是問題。謝謝。 – narcoleptic

相關問題