通过Powershell将两个csv的列合并为一个csv

时间:2015-05-27 09:02:53

标签: arrays shell powershell csv integer

可以对这个人的某些人提供指导,得到一个让我疯狂的小虫子,如果有人能指出我的问题是什么就会很棒。

我有两个.csv(逗号分隔)文件,第一个像这样结构化(但有更多记录):

Name                               Count
C:\users\user1\documents, .docx     12
C:\users\user1\documents, .xlsx     5

和第二个csv结构如下:

FileSize
 3456
 5682

我正在尝试选择第一个csv中的两列和第二个csv中的第一列,并创建一个新属性以形成如下结果:

   Name                               Count    FileSize
   C:\users\user1\documents, .docx     12        3456
   C:\users\user1\documents, .xlsx     5         5682

到目前为止我的代码是:

$csvarray = Import-Csv -Path "C:\Support\Test02.csv"
$csvarray2 = Import-Csv -Path "C:\Support\Test03.csv"
$csvarray += $csvarray2

$csvarray | Select-Object -Property {$_.Name}, {[int]$_.Count}, {[int]$_.FileSize}

我得到的结果非常令人沮丧:

   Name                               Count    FileSize
   C:\users\user1\documents, .docx     12         0
   C:\users\user1\documents, .xlsx     5          0
                                       0         3456
                                       0         5682

我认为尽管我已经创建了一个数组来合并这两个csv文件,但它仍然试图从我的主csv中不存在的列中选择结果,该列实际上返回NULL或者#34; 0"在这种情况下。

任何人都可以提供帮助我会非常感激。

*编辑 我想补充一点,将文件大小与文件扩展名相匹配并不重要,因为我的主shell脚本会将原始数据拆分为两个独立的csv,因此这将永远是准确的。所以这不是一个因素。

1 个答案:

答案 0 :(得分:0)

您无法添加到数组,您需要使用新属性扩展原始对象:

$c1 = Import-Csv -Path "C:\Support\Test02.csv"
$c2 = ...
$c1 | % {$i=0} { $c1[$i] | Add-Member -NotePropertyName FileSize -NotePropertyValue $c2[$i++].FileSize;}
$c1 | Export-Csv combined.csv