$data1 = Import-Csv "SASSO1.csv" | ?{$_.SourceType -eq "file"} | select "FullPath"
$data2 = Import-Csv "SASSO2.csv" | ?{$_.SourceType -eq "file"} | select "FullPath"
$data1 | Where-Object -FilterScript { $_.FullPath -notin $data2 } | Export-Csv "RISULTATO.csv" -NoTypeInformation
我的問題是,如何找到兩個 csv 檔案之間的差異,它只需要一列或 FullPath?
uj5u.com熱心網友回復:
您可以使用Compare-Object來進行此類比較。
例子
$data1 = @'
FullPath,Name,Desc
a,a,a
b,b,b
c,c,c
'@ | ConvertFrom-Csv
$data2 = @'
FullPath,Name,Desc
d,d,d,
e,e,e
c,c,c
'@ | ConvertFrom-Csv
Compare-Object -ReferenceObject $data1 -DifferenceObject $data2 -Property FullPath
結果
FullPath SideIndicator
-------- -------------
d =>
e =>
a <=
b <=
通過查看結果,您可以看到記錄 d 和 e 僅在$data2其中,而 a 和 b$data1僅在其中。
基于此,您可以匯出這些記錄或對它們做任何您想做的事情。如果您想獲取完整的物件以及 SideIndicator 屬性,則可以使用該-PassThru開關,以便獲得類似于以下結果的內容
FullPath Name Desc SideIndicator
-------- ---- ---- -------------
d d d =>
e e e =>
a a a <=
b b b <=
這樣,您可以簡單地選擇要匯出的屬性| Select-Object -Property FullPath,Name,Desc并匯出不在兩個資料庫中的所有結果。
如果您希望同時包含兩個 csv 中的結果,您也可以使用該-IncludeEqual開關,也可以使用該開關。-ExcludeDifferent
最后,如果您只想要比較的一側(例如:僅缺少的記錄$data1),那么您可以使用簡單的where陳述句(例如:)過濾結果| Where-Object -Property Sideindicator -eq '=>'。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/494578.html
