我正在尝试比较2个CSV文件,即Old.csv和new.csv。我只想比较并打印与new.csv相比不在old.csv中的那些行。
我只想打印旧文件中没有的新文件。
$a = Import-Csv -Path C:\Users\subhatnagar\Desktop\old.csv
$b = Import-Csv -Path C:\Users\subhatnagar\Desktop\new.csv
$Green = $b | Where {$a -notcontains $_} $green
答案 0 :(得分:3)
鉴于您要查找两个.csv文件之间的新行,可以使用Compare-Object
。
$a = Import-Csv -Path C:\Users\subhatnagar\Desktop\old.csv
$b = Import-Csv -Path C:\Users\subhatnagar\Desktop\new.csv
Compare-Object -ReferenceObject $a -DifferenceObject $b | Select-Object -ExpandProperty InputObject | Export-Csv C:\Users\subhatnagar\Desktop\difference.csv -NoTypeInformation
命令说明:
Compare-Object -ReferenceObject $a -DifferenceObject $b
-查找与对象之间的差异
Select-Object -ExpandProperty InputObject
-仅显示不同的对象,而不显示Compare-Object
的指示符
Export-Csv -NoTypeInformation
-将管道值存储到不带类型头的.csv文件中。
如果只想将差异存储在变量中,只需删除Export-Csv
部分:
$green = Compare-Object -ReferenceObject $a -DifferenceObject $b | Select-Object -ExpandProperty InputObject
答案 1 :(得分:0)
如果您仅对“ 仅那些与new.csv 相比在old.csv中不存在的行”感兴趣,而对对象和从中导入的对象不感兴趣.csv
文件始终只包含字符串类型的属性。
您对问题的建议实际上可能对您有用,但是您需要将内容作为行(使用Get-Content
)而不是作为 objects (使用{ {3}})
$a = Get-Content -Path C:\Users\subhatnagar\Desktop\old.csv
$b = Get-Content -Path C:\Users\subhatnagar\Desktop\new.csv
$green = $b | Where {$a -notContains $_}
$green
请注意,此解决方案将比较行,而不是对象, 这意味着如果交换列,
new.csv
文件中的所有行 all 被认为是不同的,如果您将输入作为 对象。