2015-10-30 62 views
1

我有2個CSV文件如下所示:比較2個CSV文件適用於不同的列名

文件1:

IP地址,設置

文件2:

端口IP(與具有diff名稱的IP地址相同),名稱

W我想要做的是從文件1中獲取IP地址,並將其與來自文件2的端口IP進行比較,並獲取名稱。然後我想創建一個具有以下第3檔:當

QueName,IP地址,從文件1設置

的IP可以在文件2多個IP(一個IP可以屬於多個隊列),所以我嘗試以下它會一次給我所有IP地址的列表,我無法連接設置字段到所有行。

$duplexdata = Import-CSV "C:\queues\duplex.csv" 
$countduplexdata = (Import-CSV "C:\queues\duplex.csv").count 
$qip = Import-CSV "C:\queues\qip.csv" 
$countqip = (Import-CSV "C:\queues\duplex.csv").count 

$i=0 
$j=0 

for($i=0; $i -le $countduplexdata+1; $i++) 
{ 
$ipaddress=$duplexdata.'IP address'[$i] 
$qip | where{$_.PortIP -eq "$ipaddress"} 

這得到以下數據:http://imgur.com/T9FQpf3,這是很好的,但是當我嘗試從文件1串聯設置字段它只會增加它在每個數據塊,它認定的結束。我怎樣才能將這個值添加到每一行?

+1

你應該給你的CSV文件的一個例子,如果想耀更精確的結果。 – JPBlanc

回答

0

我想嘗試另一種方法:

首先,我會改變CVS文件的頭部有一個共同的列IP。

其次,我會添加兩組對象。

$duplexdata = Import-CSV "C:\queues\duplex.csv" 
$qip = Import-CSV "C:\queues\qip.csv" 
$duplexdata,$qip | group-object -Property 'IP address' 

第三次在結果中找到一個組的屬性,所有的行允許我建立一個新的對象。

0

如果您無法控制輸出文件,則可以在使用計算屬性導入文件後輕鬆更改其中一個「列」。

$duplexdata = Import-CSV "C:\queues\duplex.csv" 
$qip = Import-CSV "C:\queues\qip.csv" | Select @{Label="Ip Address";Expression={$_.PortIP}} 

所以現在都$duplexdata$qip份額列呼叫「IP地址」,而不必更改源文件。

雖然這並不重要。你所要求的東西就像一個SQL JOIN。我建議看看這篇文章的Join-Object。但是你有一個小的數據集,所以你可以做這樣的事情。

$duplexdata = Import-CSV "C:\temp\file1.csv" 
$qip = Import-CSV "C:\temp\file2.csv" 

$qip | ForEach-Object{ 
    $address = $_."Port IP" 
    New-Object -Typename psobject -Property @{ 
     "IP Address" = $address 
     Setting = $duplexdata | Where-Object{$_."Ip Address" -eq $address} | Select-Object -ExpandProperty Setting 
     Name = $_.Name 
    } 
} | Select-Object "Ip Address",Name,Setting 

只是爲每個$qip創建一個新對象。對於每個$qip,我們從其他文件數據中找到匹配的設置。


另外我看到你導入文件兩次。首先是數據,第二是數據。這樣做是多餘的。

$duplexdata = Import-CSV "C:\queues\duplex.csv" 
$countduplexdata = (Import-CSV "C:\queues\duplex.csv").count 

可能只是

$duplexdata = Import-CSV "C:\queues\duplex.csv" 
$countduplexdata = $duplexdata.count