【发布时间】:2022-01-11 11:28:46
【问题描述】:
我有 12 个 csv 文件,我正在读取并根据条件将其合并到单个 csv 中。
但在合并后,我只能在每台服务器上获得一条记录,因为我使用了$_.Group[0]
下面是我的代码
$allFiles = Import-Csv -Path (Get-ChildItem -Path C:\Files\ -Filter '*.csv').FullName
$Final_Data = $allFiles | Group-Object VM | Select-Object Name,Count, @{n='Start';e={$_.Group[0].Start}},@{n='Host';e={$_.Group[0].Host}}, @{n='VMDiskLatency';e={$_.Group[0].VMDiskLatency}},@{n='Datastore';e={$_.Group[0].Datastore}} | Where-Object {$_.Count -ge 5} | Export-Csv -Path "C:\Files\Final_Report.csv" -NoTypeInformation
数据如下$allFiles
Start Host VMDiskLatency Datastore
----- ---- ------------- ---------
1/11/2022 8:12:01 AM t02.r 94 MGT_1d59
1/11/2022 8:12:01 AM z02.r 81 Z_3255_325a
1/11/2022 8:12:01 AM n34.r 108 EN_259b
1/11/2022 8:12:01 AM n35.r 210 EN_259b
1/11/2022 8:12:01 AM n37.r 104 EN_f5bf
使用我的代码,我得到如下的最终输出
Name Count Start Host VMDiskLatency Datastore
TN2AP 12 1/11/2022 8:12 n34.r 108 GEN_319c
TN1AP 12 1/11/2022 8:12 n35.r 210 GEN_259b
TN4AP 12 1/11/2022 8:12 n37.r 104 GEN_f5bf
H1SC 12 1/11/2022 8:12 n34.r 202 GEN_7a29
但我正在寻找的输出就像例如给 1 台服务器
Name Count Start Host VMDiskLatency Datastore
TN2AP 12 1/11/2022 8:12 n34.r 108 GEN_319c
1/11/2022 7:12 201
1/11/2022 6:12 182
1/11/2022 8:42 103
1/11/2022 8:22 66
1/11/2022 5:12 99
1/11/2022 4:12 541
1/11/2022 9:12 100
1/11/2022 8:12 209
1/11/2022 6:32 115
1/11/2022 8:12 78
1/11/2022 8:12 62
上面的服务器出现了 12 次(意味着在所有 csv 文件中),所以对于 Start 和 VMDiskLatency,应该有所有 12 个条目。 如果是 6,那么所有 6 个条目等等..
请告诉我该怎么做。
【问题讨论】:
-
也许你想改用
... |Group-Object VM |Select-Object Name,Count -ExpandProperty Group? -
@MathiasR.Jessen:我会试一试,但我只想要帖子中提到的 2 列的所有值。不适合所有人。因为所有其他列在 csv 文件中将具有相同的值
-
那么 CSV 可能不是您想要的格式。如果您从“连续”行中省略列值,那么任何人都可以通过简单地重新排序行来弄乱您的数据集。
-
@MathiasR.Jessen:明白了。我可以选择退出。可以显示所有列值。但必须根据计数显示所有这些。我们计划安排并通过邮件发送。所以我们现在可以做很多事情来防止数据发生任何变化。
标签: powershell csv