【问题标题】:Powershell - convert multiple coulmns CSV to two column CSV or UNPIVOTPowershell - 将多列 CSV 转换为两列 CSV 或 UNPIVOT
【发布时间】:2020-01-07 22:38:19
【问题描述】:

I have a CSV, which i wanted to convert to two column(Timestamp , value) CSV

我想要一个如下所示的输出 csv

2019 年 9 月 6 日 1:00:00 - 305

2019 年 9 月 6 日 2:00:00 - 284

2019 年 9 月 6 日 3:00:00 - 268

-

-

【问题讨论】:

  • An image of your code is not helpful。请出示您的代码。我们希望您先尝试自己解决问题。
  • 另外,请编辑问题并解释提取规则是什么。看起来您已经为第一列组合了日期和时间。其他列呢?

标签: powershell csv transform transpose


【解决方案1】:

对于一般可重复使用的UnPivot-Object 函数的震动:

数据示例

$Table = ConvertFrom-Csv @'
Hour,9/6/2019,9/7/2019,9/8/2019
1,305,293,257
2,284,273,241
3,268,256,227
'@

UnPivot 函数

Function UnPivot-Object {
    [CmdletBinding()][OutputType([Object[]])]Param (
        [Parameter(ValueFromPipeLine = $True)]$InputObject
    )
    Process {
        $Properties = $InputObject.PSObject.Properties
        $Row = ($Properties | Select-Object -First 1).Value
        $Properties | Select-Object -Skip 1 | ForEach-Object {
            [PSCustomObject]@{Row = $Row; Column = $_.Name; Value = $_.Value}
        }
    }
}; Set-Alias UnPivot UnPivot-Object

结果

$Table | UnPivot

Row Column   Value
--- ------   -----
1   9/6/2019 305
1   9/7/2019 293
1   9/8/2019 257
2   9/6/2019 284
2   9/7/2019 273
2   9/8/2019 241
3   9/6/2019 268
3   9/7/2019 256
3   9/8/2019 227

针对您的问题

$Table | UnPivot | Sort Column | ForEach {'{0} {1:##}:00:00 - {2}' -f $_.Column, $_.Row, $_.Value}

9/6/2019 1:00:00 - 305
9/6/2019 2:00:00 - 284
9/6/2019 3:00:00 - 268
9/7/2019 1:00:00 - 293
9/7/2019 2:00:00 - 273
9/7/2019 3:00:00 - 256
9/8/2019 1:00:00 - 257
9/8/2019 2:00:00 - 241
9/8/2019 3:00:00 - 227

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2018-06-23
    • 2012-05-22
    • 1970-01-01
    • 2015-12-31
    • 2019-07-14
    • 2015-04-01
    相关资源
    最近更新 更多