簡體   English   中英

使用 powershell 比較 2 個 CSV 文件

[英]Compare 2 CSV files using powershell

我正在將 2 個 csv 文件與 IP 地址進行比較。

下面是代碼,但它沒有給我正確的報告。 $CSV2中有 IP 個地址,但未顯示

$CSV1 = Import-Csv -Path "E:\IP_Details.csv"
$CSV2 = Import-Csv -Path "E:\IP_Details_1.csv"

$Count = $CSV1.Count
$Results = For ($i = 0; $i -lt $Count; $i++) {

$IP_one = $CSV1[$i].'IP adress'.Trim()
$IP_two = $CSV2[$i].'IP adress'.Trim()

    If ($CSV1[$i].'IP adress' -eq $CSV2[$i].'IP adress') {
        $Match = "Match"
    } 
    Else {
        $Match = "Not Match"
    }
    [PSCustomObject]@{
        
        Value = $CSV1[$i].'IP adress'
        IPName = $CSV1[$i].IPName
        Results = $Match
    }
}
$Results | Export-Csv -Path "E:\File.csv" -NoTypeInformation

請讓我知道代碼中有什么問題

得到以下行,工作正常

$file1 = import-csv -Path "E:\InfoBlox_Used_IP_Details.csv" 
$file2 = import-csv -Path "E:\CMDB_IP_Details.csv" 
Compare-Object $file1 $file2 -property 'IP adress' -IncludeEqual | Export-Csv -Path e:\testmantest2.csv

但它給了我 output 之類的

"IP adress","SideIndicator"
"10.15.9.8","=="
"10.15.9.6","=="
"10.15.9.14","=="
"10.12.21.10","<="

但我需要 output 如下所示,其中== should be match並且>= is not match

"IP adress","IP Name","Status"
"10.15.9.8","one","match"
"10.15.9.6","two","match"
"10.15.9.14","three","match"
"10.12.21.10","four","Not macth"

你能告訴我我該怎么做嗎

這是解決問題的方法,因為您只想知道 CSV2 中是否存在 CSV1 中的 IP,使用Hashset應該比Compare-Object更有效。 至於你做錯了什么,在你的初始代碼中,你正在逐行比較,因此即使兩個 Csvs 中都存在 IP,如果它們不在同一行/行上,你的情況將是$false的。

$CSV1 = Import-Csv -Path 'C:\path\to\csv1.csv'
$reference = [System.Collections.Generic.HashSet[string]]::new(
    [string[]](Import-Csv -Path 'C:\path\to\csv2.csv').'IP address'.ForEach('Trim')
)

$results = foreach($line in $Csv1)
{
    $ip = $line.'Ip address'.Trim()
    [PSCustomObject]@{
        Value   = $ip
        IPName  = $line.IPName
        Results = ('Not Match', 'Match')[$reference.Contains($ip)]
    }
}

$results | Export-Csv -Path "E:\File.csv" -NoTypeInformation

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM