我有一个带有分类数据的CSV文件(带标题)。该文件每天更新一次。我需要找到这些文件(旧文件和新文件)的差异,并将它们提取到一个单独的文件中。
例如:在旧文件中可能有“18,50”的价格,现在它是“17,90”的更新版本。该脚本现在应该将此行提取到一个新文件中。
到目前为止,我能够导入两个CSV文件(通过Import-Csv
),但我目前的解决方案是按findstr
比较每一行。
问题是:
我目前的代码是:
foreach ($oldData in (Import-Csv $PSScriptRoot\old.csv -Delimiter ";" -Encoding "default")) {
foreach ($newData in (Import-Csv $PSScriptRoot\new.csv -Delimiter ";" -Encoding "default")) {
findstr.exe /v /c:$oldData $newData > $PSScriptRoot\diff.txt
}
}
答案 0 :(得分:1)
将两个文件读入单独的变量并使用Compare-Object
进行比较:
$fields = 'idArtikel', 'Preis', ...
$csv1 = Import-Csv $PSScriptRoot\old.csv -Delimiter ';'
$csv2 = Import-Csv $PSScriptRoot\new.csv -Delimiter ';'
Compare-Object -ReferenceObject $csv1 -DifferenceObject $csv2 -Property $fields -PassThru | Where-Object {
$_.SideIndicator -eq '=>'
} | Select-Object $fields | Export-Csv 'C:\path\to\diff.csv' -Delimiter ';'
答案 1 :(得分:0)
$csv1 | Join $csv2 idArtikel -Merge {$Right.$_} | Export-CSV 'C:\path\to\diff.csv' -Delimiter ';'
有关Join
(Join-Object
)的详细信息,请参阅:https://stackoverflow.com/a/45483110/1701026