【发布时间】:2020-12-29 17:08:45
【问题描述】:
*Doug Maurer 和 Mathias R. Jessen 的 cmets 已重述此问题
我正在尝试处理从 Nessus 合规性和漏洞扫描中导出的 .CSV 文件。我将所有格式相同的 CSV 文件合并在一起,剩下一个新的 CSV 文件,该文件平均约为 90,000 条记录和 26 个属性。
我需要: (1) 删除描述属性中所有带有字符串“[PASSED]”的行 (2a) 合并为一条记录,每条记录的“主机”属性中的所有数据都具有相同的“描述”属性 (2b) 删除所有具有相同“描述”属性的记录;具有合并“主机”属性的记录除外
我目前有一个将 Microsoft Excel 与 PowerShell 结合的解决方案,但脚本需要 8 天才能运行;我认为我可以通过从脚本中删除 Excel 并仅处理 PowerShell 对象或类似对象中的数据来加快处理速度。
我知道当涉及到我要处理的数据量时,PowerShell 数组效率低下,但有人告诉我 [system.collection.arraylist] 效率要高得多;所以我尝试使用下面的方法创建一个多维数组,但没有成功。
$list=Import-CSV ./MasterCompliance.csv
$array=[System.Collections.ArrayList]@(,($list.'Plugin ID'),($List.CVE),($List.CVSS),($List.Risk),($List.Host),($List.Protocol),($List.Port),($List.Name),($List.Synopsis),($List.Description),($List.Solution),($List.'See Also'),($List.'Plugin Output'),($List.'STIG Severity'),($List.'CVSS v3.0 Base Score'),($List.'CVSS Temporal Score'),($List.'CVSS v3.0 Temporal Score'),($List.'Risk Factor'),($List.BID),($List.XREF),($List.MSKB),($List.'Plugin Publication Date'),($List.'Plugin Modification Date'),($List.Metasploit),($List.'Core Impact'),($List.CANVAS))
上面的代码只生成了一个包含 26 条记录的单维数组......而不是包含所有记录和 26 维的数组。
我不必坚持使用数组,如果这对不同的对象类型更有效,我也会对此持开放态度。
【问题讨论】:
-
我认为您可能有 xy 问题。您以哪种方式导入/使用效率低下?
-
如果您有 90K 行,您可能希望避免一次将它们全部存储在内存中。同意@DougMaurer,这听起来像xy problem
标签: .net powershell csv arraylist