比较2个csv文件的不同列

时间:2015-10-23 07:43:47

标签: csv powershell

我正在尝试比较2个csv文件中的2个colums,以便我可以检查2个文件中是否存在差异。 由于其中一个文件是从事件管理系统导出的,因此正在使用的标头不同。这意味着我必须比较第一个文件(Meldings-nummer)的第一个标题下的项目和第二个文件的第二个标题下的项目,即Incidentnummer。

如果标题相同,我使用以下代码使其工作。 但是,这不能使用不同的headernames,它也没有显示结果。

$firstFile = read-host - prompt "Please input exact file location of first .csv file"
$secFile = read-host - prompt "Please input exact file location of second .csv file"
$ff = Import-Csv $firstFile
$sf = Import-Csv $secFile
Compare-Object -referenceobject $ff -differenceobject $sf -includeequal |Where-Object {$_.SideIndicator -ne "=="} |Select -ExpandProperty InputObject

或者,使用仅显示meldings-nummer的简单版本:

$file1 = import-csv -Path "C:\Users\Documents\scripts\Powershell\Overzicht_Meldingen_2015-10-21.csv" 
$file2 = import-csv -Path "C:\Users\Documents\scripts\Powershell\Overzicht_Meldingen_2015-10-21aangepast.csv" 
Compare-Object $file1 $file2 -property Meldings-nummer

这是首选,但随后具有第一个的灵活性(必须手动输入文件位置)

有没有人知道如何或有任何提示,以便我能够比较不同的列并展示它们?

更新 我刚刚发现了一些我调整过的代码。我认为这应该比较2个文件,并给出一个显示差异的新文件。 即使它执行正常并给我文件,除了文本'Wijziging'之外,文件中没有任何内容。

 $OldCSV = import-csv -Path "C:\Users\Documents\scripts\Powershell\Overzicht_Meldingen_2015-10-21.csv" 
 $NewCSV = import-csv -Path "C:\Users\Documents\scripts\Powershell\Overzicht_Meldingen_2015-10-21aangepast.csv" 

 $output = @()  
     forEach ($Column in $OldCsv) {      
        $result = $NewCSV | Where-Object {$Column."Meldings-nummer" -eq          $_.Incidentnummer}  
        $Melding = if ($Column.Powerstate -ne $result.PowerState)    {"Previous: " + $Column."Meldings-nummer" + " | Now:" + $result.Incidentnummer}  
         $output += New-object PSObject -property @{  
         #VMname = $Column.Name  
         Wijziging = $Melding  

       }  
     }  
   $output | select-object Wijziging | Export-Csv -Path    C:\Users\Documents\scripts\Powershell\Changes.csv -NoTypeInformation  

2 个答案:

答案 0 :(得分:0)

感谢帮助,但我想我自己使用以下代码解决了这个问题。

$file1 = import-csv -Path "C:\Users\Documents\scripts\Powershell\Overzicht_Meldingen_2015-10-21.csv" -header Meldings-nummer
$file2 = import-csv -Path "C:\Users\Documents\scripts\Powershell\Tweedelijns_incidenten14.csv" -header Incidentnummer 
Where-Object {$File1."Meldings-nummer" -ne $file2.Incidentnummer}
Compare-Object $file1 $file2

现在我可以在其中加入点睛之笔,因此它会像第一个代码中那样请求csv文件

答案 1 :(得分:0)

假设第一个文件的升序顺序为Meldings-nummer而第二个文件的升序顺序为Incidentnummer,则可以这样做:

[int] $i = 0
[int] $j = 0
while ($i -le $ff.Count)
{
    if ($ff[$i].'Meldings-nummer' -lt $sf[$j].IncidentNummer -or $j -gt $sf.Count)
    { 
        Write-Host ("Meldings-nummer {0} not in second file." -f $ff[$i].'Meldings-nummer')
        $i++
    }
    while ($ff[$i].'Meldings-nummer' -gt $sf[$j].IncidentNummer -or $i -gt $ff.Count)
    {
        if ($j -ge $sf.Count)
            { break }
        Write-Host ("IncidentNummer {0} not in first file." -f $sf[$j].IncidentNummer)
        $j++
    }
    if ($ff[$i].'Meldings-nummer' -eq $sf[$j].IncidentNummer)
    { 
        $j++ 
        $i++
    }
}
相关问题