我有一个用于帮助台呼叫的CSV文件。根据它具有的更新次数,同一票证可能包含1,2或甚至5条记录。 (一个字段不同,所有其他字段都相同)。
我想采用大多数重复的记录并创建一条记录,并将差异连接到其中。 (我是一名长期的程序员,这不应该是一个问题。但我对PowerShell来说是全新的。)
我认为最好的方法是将文件加载到多维数组中,然后我可以逐步浏览记录,查找重复的ID号。
因此,假设这是处理此问题的最佳方法,如何将CSV文件加载到多维数组中?
答案 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