比较Powershell中的两个CSV文件,指出出现哪些行和列不匹配

时间:2014-04-17 17:44:43

标签: powershell csv

我需要编写一个PowerShell脚本,告诉我两个CSV文件之间的行号和列不同。我的下面的脚本只告诉我行中是否有差异,但不告诉我CSV中的确切列是错误的。

cls
$file = "C:\test\compare xls\1930_CoB_Birth_Records.csv"
$file2 = "C:\test\compare xls\1930_cob_jbnj.csv"
$linecount = 0

Get-Content $file |  ForEach-Object {
    $linecount++
    $line2Count = 0
    $a = $_
    Get-Content $file2 | ForEach-Object {
        $line2count++
        $errorCountLine = 0
        if ($line2count -eq $linecount) {
            $b = $_
            $errorCountLine += (@(Compare-Object $a $b -SyncWindow 0).count / 2)
            if ($errorCountLine -ne 0) {
                  Write-Host $line2Count "-" $errorCountLine
            } else {
                Write-Host "good"
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

假设您的两个CSV都具有相同数量的记录以及相同的字段,则此类内容可能有效:

$csv1 = Import-Csv 'C:\path\to\foo.csv'
$csv2 = Import-Csv 'C:\path\to\bar.csv'

for ($line=1; $line -le $csv1.Length; $line++) {
  $a = @{};
  $b = @{};

  $csv1[$line-1].PSObject.Properties | % { $a[$_.Name] = $_.Value }
  $csv2[$line-1].PSObject.Properties | % { $b[$_.Name] = $_.Value }

  if (Compare-Object $a.Values $b.Values) {
    $mismatches = ($a.Keys | ? { $a[$_] -ne $b[$_] }) -join ', '
    "Line {0}: mismatch in column(s) {1}." -f $line, $mismatches
  }
}