我需要编写一个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"
}
}
}
}
答案 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
}
}