使用PowerShell在CSV中的同一列中设置多个单元格

时间:2017-06-29 07:49:38

标签: powershell csv

我需要在同一列中有一些值,目前我的结果显示了。 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 ";"

我想获得此结果(删除Field2Field3,但保留行并包含它们:

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

如果您需要更多信息,我可以编辑以解释更多信息。

1 个答案:

答案 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 ';'

显然,您需要调整正则表达式以反映您的实际标准。