2015-10-30 58 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