Powershell - 将CSV文件加载到多维数组

时间:2016-10-27 21:52:54

标签: arrays powershell csv

我有一个用于帮助台呼叫的CSV文件。根据它具有的更新次数,同一票证可能包含1,2或甚至5条记录。 (一个字段不同,所有其他字段都相同)。

我想采用大多数重复的记录并创建一条记录,并将差异连接到其中。 (我是一名长期的程序员,这不应该是一个问题。但我对PowerShell来说是全新的。)

我认为最好的方法是将文件加载到多维数组中,然后我可以逐步浏览记录,查找重复的ID号。

因此,假设这是处理此问题的最佳方法,如何将CSV文件加载到多维数组中?

1 个答案:

答案 0 :(得分:2)

好的,所以在不知道输入数据的情况下,以下是如何在PowerShell中解决问题的框架。请记住,在PowerShell中,您正在处理对象,这实际上使这更容易。

我的输入数据如下所示:

IncidentID,Comment
IT01,"User says stuff is broken"
IT01,"All fixed"
IT02,"Printer is out of toner. Sent Moss to replace."
IT03,"Jen turned off the internet."
IT03,"Douglas is very cross - we need a fix urgently."
IT03,"Turns out Roy was playing a practical joke on Jen."

首先,我将CSV导入到一个记录数组中 - 这基本上是你的二维数组,除了它实际上是一维对象数组。

$> $records = Import-CSV myfile.csv

然后,我们按IncidentID

对对象进行分组
$> $incidents = $records | Group IncidentID

如果我们现在打印$incidents,我们可以看到它的外观:

$> $incidents
Count Name                      Group
----- ----                      -----
    2 IT01                      {@{IncidentID=IT01; Comment=User says stuff is broken}, @{IncidentID=IT01; Comment=All fixed}}
    1 IT02                      {@{IncidentID=IT02; Comment=Printer is out of toner. Sent Moss to replace.}}
    3 IT03                      {@{IncidentID=IT03; Comment=Jen turned off the internet.}, @{IncidentID=IT03; Comment=Douglas is very cros...

要访问单个记录,您可以使用以下语法:

$> $incidents[0].Group[0]
IncidentID Comment
---------- -------
IT01       User says stuff is broken

最后,要将注释数组转换为单个字符串,您可以使用以下命令,它将创建一个名为Comments的“计算属性”(在PowerShell用语中),它将注释数组展平为字符串。

$> $final = $incidents | `
             Select Name, `
                    @{`
                        Name='Comments'; `
                        Expression={ $_.Group | Select -Expand Comment | Out-String }}

$> $final[0].Comments
User says stuff is broken
All fixed