【问题标题】:Combining columns of two csvs into one csv via Powershell通过Powershell将两个csv的列组合成一个csv
【发布时间】:2015-05-27 09:02:52
【问题描述】:

可以在这方面得到一些人的指导,有一个小错误让我发疯,如果有人能指出我的问题是什么,那就太好了。

我有两个 .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 或“0”。

谁能帮忙,我将不胜感激。

*编辑 我只想补充一点,将文件大小与文件扩展名匹配并不重要,因为这始终是准确的,这要归功于我的主要 shell 脚本,它将原始数据分成两个单独的 csv,所以这不是一个因素。

【问题讨论】:

    标签: arrays shell powershell csv integer


    【解决方案1】:

    你不能添加到数组中,你需要用新的属性扩展原来的对象:

    $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
    

    【讨论】:

    • 呸,每天都是学生日。我现在知道如何使用扩展函数来应用新属性。真的非常感谢你! &为了您的快速反应,真是个好人:-)。
    • 没问题老兄 - 很高兴帮助:)
    猜你喜欢
    • 2016-09-22
    • 2020-07-14
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多