【发布时间】:2018-06-12 14:24:22
【问题描述】:
我正在尝试创建一个将 CSV 文件从列转换为行的 PowerShell 脚本。
我发现了相反的例子(将基于行的 CSV 转换为列),但我没有发现列到行的任何内容。我的问题是我不知道我将拥有多少列。我尝试调整行到列到列到行,但没有成功。
$a = Import-Csv "input.csv"
$a | FT -AutoSize
$b = @()
foreach ($Property in $a.Property | Select -Unique) {
$Props = [ordered]@{ Property = $Property }
foreach ($Server in $a.Server | Select -Unique){
$Value = ($a.where({ $_.Server -eq $Server -and
$_.Property -eq $Property })).Value
$Props += @{ $Server = $Value }
}
$b += New-Object -TypeName PSObject -Property $Props
}
$b | FT -AutoSize
$b | Out-GridView
$b | Export-Csv "output.csv" -NoTypeInformation
例如,我的 CSV 可能如下所示:
"ID","DATA1" "12345","11111" "54321","11111" "23456","44444"或者这个(列数可以变化):
"ID","DATA1","DATA2","DATA3" "12345","11111","22222","33333" "54321","11111",, "23456","44444","55555",我希望脚本能像这样转换它:
"ID","数据" "12345","11111" "12345","22222" "12345","33333" "54321","11111" "23456","44444" "23456","55555"【问题讨论】:
-
嗯......所以你所要求的并不是你所说的你想要的。将列转换为行不会给出您显示的输出。您想要的是将每个 ID 的一行转换为每个 ID 的多行。有几种方法可以解决这个问题。 ID 总是会是第一列吗?
-
是的,它永远是第一列
-
另外,数据是否有可能在字段中包含逗号?
-
不,字段中不会有任何逗号。
标签: powershell csv