如何使用 Powershell 删除 CSV 标题并保持列分开

考克斯塔

我正在尝试根据第一列中的值将 CSV 分成 2 个。新创建的 CSV 不能有列名,这就是问题所在。当我删除标题时,所有值都进入第一列。

为了根据第一列值拆分 CSV,我必须分配标题。使用正确的值成功创建了 2 个新文件,但是我的最后一步是删除标题,因为用于处理 CSV 的应用程序将不接受列名。

删除标题后,所有值不再以逗号分隔,因此都在第一列中。我怎样才能解决这个问题?

if (!(Test-Path X:)) {
    $net = New-Object -comobject Wscript.Network
    $net.MapNetworkDrive("X:","**Path**")
}

$file = Get-ChildItem -Path "**Path**"  | Where-Object {
    $_.LastWriteTime -gt (Get-Date).AddHours(-10) -and
    $_.Name -like '*.CSV*'
}

if ($file) {
    $filename = $file.FullName
    $date = (Get-Date).ToString("yyyyMMdd")
    $ExportPathJUO = "**Path**$date"
    $ExportPathWDA = "**Path**$date"

    ##Create Seperate Files in Staging Folder
    $csv = Import-Csv $filename -Header A,B,C,D,E,F,G
    $IDS = $csv | select -ExpandProperty A -Unique
    foreach ($ID in $IDS) {
        $csv | where {
            $_.A -like '*0000009*'
        } | Export-Csv $ExportPathJUO -NoTypeInformation
    }
    foreach ($ID in $IDS) {
        $csv | where {
            $_.A -like '*0000007*'
        } | Export-Csv $ExportPathWDA -NoTypeInformation
    }

    ##Remove Headers
    (Get-content $ExportPathJUO) |
        select -Skip 1 |
        Out-File -FilePath $ExportPathJUO -Force
    (Get-content $ExportPathWDA) |
        select -Skip 1 |
        Out-File -FilePath $ExportPathWDA -Force 
}
安斯加·威彻斯

*-Csv如果您的 CSV 中没有/不需要标题,请不要使用cmdlet。你想要的可以这样做:

foreach (line in Get-Content $filename) {
    $a = $line.Split(',')[0]
    switch -wildcard ($a) {
        '*0000007*' { $line | Add-Content $ExportPathWDA }
        '*0000009*' { $line | Add-Content $ExportPathJUO }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章