powershell 是否将列表转换为CSV格式并为每行自定义逻辑?

brc7rcf0  于 2022-11-29  发布在  Shell
关注(0)|答案(1)|浏览(107)

我有下面的代码来获取列表。

$str = '[
    {"attrs": { "id": "A", "repeat": 2}},
    {"attrs": { "id": "B", "repeat": 3}}
    ]'
$json = $str | ConvertFrom-Json

我想把它转换成CSV格式。该行应该按repeat属性的值重复。

id,repeat
A,2
A,2
B,3
B,3
B,3

下面的代码

$json | % { $_.attrs | ConvertTo-Csv -NoTypeInformation -UseQuotes AsNeeded | select -Skip 1 }

生成如下结果。如何实现日志以重复行?(实际逻辑比较复杂,generator等语言特性可能会有帮助,但Powershell似乎没有。)

A,2
B,3
tv6aics1

tv6aics11#

可以使用范围运算符..和内部循环:

$json.attrs | ForEach-Object {
    foreach($i in 1..$_.repeat) { $_ }
} | Export-Csv path\to\csv.csv -NoTypeInformation

如果你想得到一个没有头文件的文件,那么ConvertTo-Csv也可以在循环之外:

$json.attrs | ForEach-Object {
    foreach($i in 1..$_.repeat) { $_ }
} | ConvertTo-Csv -UseQuotes AsNeeded | Select-Object -Skip 1

相关问题