Csv 使用PowerShell将行转换为列
我又一次经历了一段艰难的时光,试图将行转换为列 原始代码来自@Mathias R.Jessen,但现在我需要在csv文件中添加一些附加列。我想要(我不介意订单) EndTime、ActualStart Time、“MachineName1”、“MachineName2”、“MachineNameEx”、ElapsedTime、FinalJobStatusCsv 使用PowerShell将行转换为列,csv,powershell,transpose,Csv,Powershell,Transpose,我又一次经历了一段艰难的时光,试图将行转换为列 原始代码来自@Mathias R.Jessen,但现在我需要在csv文件中添加一些附加列。我想要(我不介意订单) EndTime、ActualStart Time、“MachineName1”、“MachineName2”、“MachineNameEx”、ElapsedTime、FinalJobStatus #1.csv #MachineName, TotalDataSizeBytes, ActualStartTime,EndTime,Elap
#1.csv
#MachineName, TotalDataSizeBytes, ActualStartTime,EndTime,ElapsedTime,FinalJobStatus
#SERVER1, 322349304901, 28/02/2016 23:00:03, 29/03/2016 23:33:23, 222,OK
#SERVER1, 322349304902, 26/02/2016 23:00:03, 27/03/2016 23:33:24, 222,OK
#SERVER2, 322349304903, 28/02/2016 23:00:01, 29/03/2016 23:33:25, 11, OK
#SERVER2, 322349304904, 26/02/2016 23:00:01, 27/03/2016 23:33:26, 122,OK
#
#2.csv (Desired output)
#EndTime","ActualStartTime","SERVER1","SERVER2",ElapsedTime,FinalJobStatus
#"29/03/2016 23:33:23","28/02/2016 23:00:03","322349304901",222,OK
#"27/03/2016 23:33:24","26/02/2016 23:00:03","322349304902",222,OK
#"29/03/2016 23:33:25","28/02/2016 23:00:01",,"322349304903",11,OK
#"27/03/2016 23:33:26","26/02/2016 23:00:01",,"322349304904",122,OK
$Rows = Import-Csv c:\_Scripts\1.csv
$MachineNames = $Rows |Select-Object -ExpandProperty MachineName |Sort -Unique
$ConsolidatedRows = $Rows |Group-Object EndTime |ForEach-Object {
$NewRowProperties = @{ EndTime = [DateTime]::Parse($_.Name) }
foreach($Row in $_.Group)
{
$NewRowProperties.Add($Row.MachineName,$Row.TotalDataSizeBytes)
}
New-Object psobject -Property $NewRowProperties
}
$ConsolidatedRows |Select-Object @("EndTime";$MachineNames) |
Sort-Object EndTime |Export-Csv c:\_Scripts\2.csv -NoTypeInformation
我成功了:
$Rows = Import-Csv c:\_Scripts\1.csv
$MachineNames = $Rows |Select-Object -ExpandProperty MachineName |Sort -Unique
$ConsolidatedRows =""
$NewRowProperties =""
$ConsolidatedRows = $Rows |Group-Object EndTime |ForEach-Object {
$NewRowProperties = @{ EndTime = [DateTime]::Parse($_.Name) }
foreach($Row in $_.Group)
{
$NewRowProperties.Add("ActualStartTime",$Row.ActualStartTime)
$NewRowProperties.Add("ElapsedTime",$Row.ElapsedTime)
$NewRowProperties.Add($Row.MachineName,$Row.TotalDataSizeBytes)
$NewRowProperties.Add("FinalJobStatus",$Row.FinalJobStatus)
}
New-Object psobject -Property $NewRowProperties
}
$ConsolidatedRows |Ft
$ConsolidatedRows |Select-Object @("EndTime";$MachineNames;"ActualStartTime";"ElapsedTime";"FinalJobStatus")
|Sort-Object EndTime |Export-Csv c:\_Scripts\2.csv -NoTypeInformation