使用PowerShell

时间:2017-09-21 19:02:41

标签: powershell csv

我有一个CSV文件,其中包含静态列数(带标题)和动态行数,我需要将其转换为另一个具有静态行数和动态列数的CSV(有或没有头)。

以下是电子表格中之前和之后的示例。请记住,顶部部分代表我的输入数据,底部部分是所需的状态。

CSV Spreadsheet Data

当然这是一个小子集,因为我可以拥有一个拥有50个组的用户和一个可能只有1个与之关联的组的用户。这使我不知道事先的列数,所以它必须是动态的。

我已经尝试使用我在this post上找到的内容,但我遇到了一个问题,试图修改代码以满足我的需求。我能够做的最接近的是为每个唯一的用户ID创建一行,但不是在每个用户旁边的列中都有相应的组名,而是将它们设置为标题而不是用户的值。

Undesired Current Result

1 个答案:

答案 0 :(得分:1)

如果您不需要标题或已定义的列,则只需从数组的哈希表中的第二列中收集值,您可以使用第一列中的值作为键:

$data = @{}
Import-Csv 'C:\path\to\input.csv' | ForEach-Object {
    $data[$_.UserID] += @($_.GroupName)
}

然后您可以将数据导出到如下文本文件:

$data.Keys | ForEach-Object {
    $_ + ',' + ($data[$_] -join ',')
} | Set-Content 'C:\path\to\output.txt'