2016-03-22 8 views
0

Ich versuche, Daten in einen csv mit einem Vergleich der beiden csvs einzugeben. Die Daten sind ein Ergebnis des Vergleichs zwischen den beiden csvs.CSV über Vergleiche von CSV-Dateien anhängen

Beispiel:

CSV 1 sagt

Host,Type 
Host1,Server 
Host2,Switch 
Host3,Hub 
Host4,Router 

CSV 2 sagt:

List of Types, Hosts 
       ,Host1 random letters Host2 
       ,random letters Host3 Host2 
       ,Host4 Host3 Host2 

Der Ausgang

List of Types,Hosts 
server switch,Host1 random letters Host2 
hub switch,random letters Host3 Host2 
router hub switch,Host4 Host3 Host2 

sein sollten Dies ist, was ich habe:

Mein Problem scheint der Vergleich Teil

$CSV1 = Import-Csv "Pathname1.csv" 

Foreach ($title in $CSV1) 
{ 
    $Hosts =$title."Hosts" 
    $Type=$title."Type" 
} 

$csv2 = Import-Csv "Pathname2.csv" 

foreach($title in $CSV2) 
{ 
    $Typelist = $title."List of Types" 
    $Hostlist = $title."Hosts" 

    if ($Hostlist -contains $Hosts) 
    { 
    $title.'List of Types'= $Type 
    } 
} 

$csv2 | export-csv "export.csv" 

die mit Ausnahme nichts gibt absolut zu sein, was es ursprünglich war.

+0

Welche Art von Ausgabe erhalten Sie? Dies hat oft den Hinweis auf die Art des Problems. – Sparky256

+0

Nichts erscheint unter "Liste der Typen". Aber wenn ich einen '$ title.'List von Types '=" Das ist leer "' ... ohne die 'IF' Aussage ... Alle Zeilen sagen' This is blank' – ShanayL

+0

Warum sind $ csv1 und $ csv2 die gleiche Datei importieren? Auch, ist Ihr Inhalt von csv2 in Ihrer Frage genau so formatiert, wie die Zeilen und Spalten in Ihrer Datei sind (aka, kein Typ)? –

Antwort

1

Ihre CSV-Dateien machen mir wirklich keinen Sinn, wie sie organisiert sind, aber das bedeutet nicht, dass Ihr Problem nicht mit einigem Nachdenken gelöst werden kann und lernen, wie Sie Ihr Problem lösen und den Debugger durchlaufen Arbeiten.

Ich habe etwas Code aufgepumpt, um die gewünschte Ausgabe zu geben, und fügte sogar ein paar Zeilen potenziell hilfreicher Debug-Anweisungen (output) hinzu, die unkommentiert sein können, um den Fortschritt zu sehen.

CSV1

Host,Type 
Host1,Server 
Host2,Switch 
Host3,Hub 
Host4,Router 

CSV2

List of Types,Hosts 
,Host1 random1 letters1 Host2 
,random2 letters2 Host3 Host2 
,Host4 Host3 Host2 

-Code

"-=-=-=-=-=-=-= start" 

$content1 = Get-Content d:\junk\c1.csv 
$data1 = $content1 | ConvertFrom-Csv -Header @('Host','Type') 
"c1====" 
$content1 
"csv1====" 
$data1 | ft 

$content2 = Get-Content d:\junk\c2.csv 
$data2 = $content2 | ConvertFrom-Csv -Header @('Type','Hosts') 
"c2====" 
$content2 
"csv2====" 
$data2 | ft 

#"data====" 
$output = @() 
foreach ($hostList in ($data2.Hosts | select -Skip 1)){ 
    # don't use variable name $host. it is a reserved variable. 
    # see about_Automatic_Variables 
    # https://technet.microsoft.com/en-us/library/hh847768.aspx 
    $subHosts = $hostList -split ' ' 

    #"subhosts====" 
    #$subHosts 

    $types = @() 
    foreach ($subHost in $subHosts) 
    { 
     #$("sh = $subHost") 
     $typeMatch = (($data1 | select -Skip 1) | where {$_.Host -eq $subHost}).Type 

     if ($typeMatch) 
     { 
      $types += $typeMatch 
     } 
    } 
    $types = $types -join ' ' 

    #"types====" 
    #$types 

    $matches = @{} 
    $matches.Add($types, $hostList) 
    $output += $matches 
} 

"final list====" 
$output 

"-=-=-=-=-=-=-=- end" 

Ausgang

-=-=-=-=-=-=-= start 
c1==== 
Host,Type 
Host1,Server 
Host2,Switch 
Host3,Hub 
Host4,Router 
csv1==== 

Host Type 
---- ---- 
Host Type 
Host1 Server 
Host2 Switch 
Host3 Hub 
Host4 Router 

c2==== 
List of Types,Hosts 
,Host1 random1 letters1 Host2 
,random2 letters2 Host3 Host2 
,Host4 Host3 Host2 
csv2==== 

Type   Hosts      
----   -----      
List of Types Hosts      
       Host1 random1 letters1 Host2 
       random2 letters2 Host3 Host2 
       Host4 Host3 Host2   

final list==== 

Name    Value      
----    -----      
Server Switch  Host1 random1 letters1 Host2 
Hub Switch  random2 letters2 Host3 Host2 
Router Hub Switch Host4 Host3 Host2   
-=-=-=-=-=-=-=- end 
+0

Das ist eine ausgezeichnete Antwort und Erklärung, aber es funktioniert nicht mit meinen tatsächlichen Daten. Der Unterschied zwischen den beiden ist, dass ich Leerzeichen zwischen meinem Host und der Nummer habe. Wie kann ich sagen, sagen 'Host 2' und' Switch' in CSV1, wenn ich das Wort 'Host2' in CSV2 unter Hosts hatte. – ShanayL

+0

Das Problem ist, dass Sie Elemente wie "Host1 zufällige Buchstaben Host2" für Ihre Hosts verwenden, die Speicherplatz als Trennzeichen impliziert. Sie können dann nicht versuchen, dieses Trennzeichen in einem Element zu verwenden, es sei denn, Sie setzen es in Anführungszeichen oder etwas Ähnliches (z. B. 'Host1' 'zufällige' 'Buchstaben' 'Host2'). Ich bin mir nicht sicher, wie Sie diese Daten bekommen, was Sie damit machen wollen, aber es gibt wahrscheinlich einen besseren Weg. Schlagen Sie vor, dass Sie nach Best Practices (Datenstruktur, Entwurfsmuster, Arbeitsprobencode) forschen, für was auch immer Ihr Projekt verlangt. –