我需要在同一列中有一些值,目前我的结果显示了。 stats.csv是一个Excel表格。
导出后的文件“stats”:
Field1 Field2 Field3 col1 col2 col3 col4 ref a b c d ref a2 b2 c2 d2 ref a3 b3 c3 d3 ref A B C D ref A2 B2 C2 D2 ref A3 B3 C3 D3 ref AA BB CC DD ref AA2 BB2 CC2 DD2 ref AA3 BB3 CC3 DD3
当前代码:
$csv = Import-Csv .\ressources.csv -Delimiter ';'
$csv | Add-Member -Type Noteproperty -Name "Field1" -Value "prod"
$csv | Select-Object Field1,Field2,Field3,col1,col2,col3,col4 |
Export-Csv -Path ".\stats.csv" -NoTypeInformation -Delimiter ";"
$csv = Import-Csv .\ressources.csv -Delimiter ';'
$csv | Add-Member -Type Noteproperty -Name "Field2" -Value "name"
$csv | Select-Object Field1,Field2,Field3,col1,col2,col3,col4 |
Export-Csv -Path ".\stats.csv" -NoTypeInformation -Delimiter ";"
$csv = Import-Csv .\ressources.csv -Delimiter ';'
$csv | Add-Member -Type Noteproperty -Name "Field3" -Value "ref"
$csv | Select-Object Field1,Field2,Field3,col1,col2,col3,col4 |
Export-Csv -Path ".\stats.csv" -NoTypeInformation -Delimiter ";"
我想获得此结果(删除Field2
和Field3
,但保留行并包含它们:
Field1 col1 col2 col3 col4 prod a b c d prod a2 b2 c2 d2 prod a3 b3 c3 d3 name A B C D name A2 B2 C2 D2 name A3 B3 C3 D3 ref AA BB CC DD ref AA2 BB2 CC2 DD2 ref AA3 BB3 CC3 DD3
导入前的文件“ressources”:
col1 col2 col3 col4 a b c d a2 b2 c2 d2 a3 b3 c3 d3 A B C D A2 B2 C2 D2 A3 B3 C3 D3 AA BB CC DD AA2 BB2 CC2 DD2 AA3 BB3 CC3 DD3
如果您需要更多信息,我可以编辑以解释更多信息。
答案 0 :(得分:0)
使用带有calculated property语句的switch
添加新字段,其值取决于其他列的值:
Import-Csv .\test2.csv -Delimiter ';' |
Select-Object @{n='Field1';e={
switch -regex -casesensitive ($_.col1) {
'^[a-z]' { 'prod'; break }
'^[A-Z][A-Z]' { 'ref'; break }
'^[A-Z]' { 'name'; break }
}
}}, * |
Export-Csv -Path '.\stats.csv' -NoType -Delimiter ';'
显然,您需要调整正则表达式以反映您的实际标准。