我有 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
但我正在尋找的輸出就像給一臺服務器
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 個條目等等..
請讓我知道我該怎么做。
uj5u.com熱心網友回復:
如果您只想在每個組中的第一個物件上附加Name和值,請進行兩個不同的選擇 - 一個用于具有屬性值的第一個物件,另一個用于屬性值為空的其余物件:Count
$allFiles |Group-Object VM |Where-Object {$_.Count -ge 5} |ForEach-Object {
$name = $_.Name
$count = $_.Count
$first,$rest = $_.Group
$first | Select-Object @{Name='Name';Expression={$name}},@{Name='Count';Expression={$count}},'Start','Host','VMDiskLatency','Datastore'
$rest | Select-Object @{Name='Name';Expression={""}},@{Name='Count';Expression={""}},'Start','Host','VMDiskLatency','Datastore'
} | Export-Csv -Path "C:\Files\Final_Report.csv" -NoTypeInformation
我個人建議保留附加到組中每個物件的值,這樣您就可以在不丟失背景關系的情況下重新排序資料 - 并且您的運算式變得更加簡單:
$allFiles |Group-Object VM |Where-Object {$_.Count -ge 5} |Select-Object Name,Count -Expand Group |Export-Csv -Path "C:\Files\Final_Report.csv" -NoTypeInformation
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/410001.html
標籤:
上一篇:將csv轉換為陣列,但按相同日期拆分陣列并在每個陣列上執行一個函式
下一篇:使用迭代器生成csv行
