2016-10-31 6 views
-4

2つのCSVファイルを比較しようとしています。両方のファイルで共通の 'ユーザーID'列を使用し、CSV 1最初のCSVファイルには、行が欠落している場合は、電源シェル2つのCSVファイルを比較し、2番目から1番目の不足しているエントリを追加します。

+0

https://blogs.technet.microsoft.com/stefan_startger/1111/02/08/compare-two-different-csv-files-using-powershell/ 最初に比較してみてください http:// stackoverflow .com/questions/25601492/powershell-compare-two-csv-files-and-duplicate-names –

+0

ようこそスタックオーバーフロー!私たちは、プログラマーやプログラミング愛好家を支援するコミュニティです。それは、あなたが投稿した前にあなたがしたことや試したことを示すことが期待されています。これは私たちに何かを築くものです。現時点では、これはSOのトピックではないコードの書き込み要求のように読まれます。あなたの質問をその部分に分け、それらの問題の解決策を個別に検索してください。それでも問題が解決しない場合は、あなたの質問があなたの仕事を示すように[編集]して、あなたとコミュニティをより良く助けることができます。 – Matt

答えて

0

を使用して、彼らは直接二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 

また、2つのファイルが「ユーザーID」で重複する異なる列を持ち、エントリが欠落している列ではなく最初のCSVから完全になくなっているとすると、第2の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 
関連する問題