2016-10-31 76 views
-4

我嘗試使用「用戶ID」列這是在這兩個文件共同來比較2個CSV文件,並想以CSV 1失蹤條目從CSV 2追加使用電源外殼比較兩個CSV文件,並從第二個缺失項追加到1

+0

https://blogs.technet.microsoft.com/stefan_stranger/2011/02/08/compare-two-different-csv-files-using-powershell/ 試試這個比較第一個 http:// stackoverflow.com .COM /問題/ 25601492/PowerShell的比較,二,CSV,文件和文件輸出的重複的,名稱 –

+0

歡迎堆棧溢出!我們是一個幫助程序員和編程愛好者的社區。這就是說,期望你在發佈之前展示你已經完成或嘗試了什麼。這給了我們一些建設。截至目前,這看起來像是一個代碼編寫請求,這是SO的主題。將您的問題分解成各個部分,並分別搜索這些問題的解決方案。然後,如果你仍然有問題,請[編輯]你的問題顯示您的工作,以便我們能夠更好地幫助您和社區。 – Matt

回答

0

如果第一個CSV文件已丟失行,他們需要在直接從第二CSV文件複製:如果你也說,用戶ID是獨特

ipcsv 2.csv |? 'User Id' -notin (ipcsv 1.csv).'User Id' | epcsv 1.csv -Append 

您文件中,可以代替拿出一套兩的CSV的獨特行到第一個CSV:

(ipcsv 1.csv, 2.csv) | sort -Unique 'User Id' | epcsv 1.csv -NoTypeInformation 

或者,如果你說的文件具有相同的用戶ID,但不具有相同的其他列,並在第一個CSV的條目是存在的,但有一些空列,則:

$csv1 = Import-Csv d:\file1.csv 
$csv2 = Import-Csv d:\file2.csv 

foreach ($csv1item in $csv1) 
{ 
    $csv2item = $csv2.Where{$_.'User Id' -eq $csv1item.'User Id'} 

    $item1Properties = $csv1item | Get-Member -MemberType NoteProperty | select -ExpandProperty Name 
    $item2Properties = $csv2item | Get-Member -MemberType NoteProperty | select -ExpandProperty Name 
    $sharedProperties = $item1Properties.where{$_ -in $item2Properties} 

    $sharedProperties | ForEach-Object { 

     $value = $csv1item."$_" 
     if ($value -eq '') { 
      $csv1item."$_" = $csv2item."$_" 
     } 
    } 
} 

$csv1 | Export-Csv D:\file1.csv -NoTypeInformation 

或者再次,如果你說這兩個文件都在其「用戶ID」重疊,各個條目也從第一CSV完全缺失,而非存在缺失列不同的列,那麼這將增加他們從第二CSV,只服用在它們之間重疊(希望)的屬性:

$csv1 = Import-Csv d:\file1.csv 
$csv2 = Import-Csv d:\file2.csv 

$item1Properties = ($csv1[0] | gm -M NoteProperty).Name 

$newCsv1Items = foreach($csv2item in $csv2.Where{$csv1.'User Id' -notcontains $_.'User ID'}) { 

    $newcsv1Item = @{} 
    $item1Properties.ForEach{$newcsv1Item."$_" = $csv2item."$_"} 
    [PSCustomObject]$newcsv1Item 

} 

$newCsv1Items | Export-Csv -Append D:\file1.csv 
相關問題