【问题标题】:Compare two CSV file and append the missing entries from 2nd to 1st比较两个 CSV 文件并将缺少的条目从第 2 个附加到第 1 个
【发布时间】:2017-03-13 12:48:06
【问题描述】:

我正在尝试使用两个文件中常见的“用户 ID”列比较 2 个 csv 文件,并希望使用 power shell 从 csv 2 中附加 csv 1 中缺少的条目

【问题讨论】:

  • 欢迎来到 Stack Overflow!我们是一个帮助程序员和编程爱好者的社区。话虽如此,希望您在发布之前展示您所做或尝试过的事情。这给了我们一些可以建立的东西。到目前为止,这看起来像是一个代码编写请求,这与 SO 无关。将您的问题分解为各个部分,并单独搜索这些问题的解决方案。然后,如果您仍有问题,请edit 展示您的工作,以便我们更好地帮助您和社区。​​span>

标签: powershell csv compare append


【解决方案1】:

如果第一个 CSV 文件缺少行,则需要直接从第二个 CSV 文件中复制:

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

如果您还说用户 ID 在您的文件中是唯一的,您可以将唯一的行从两个 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    相关资源
    最近更新 更多