从CSV文件的字符串列中删除换行符

Var*_*pta 5 csv powershell

我有一个带有字符串列的CSV文件,该列跨越了多行。我想将这些多行汇总为一行。

例如

1, "asdsdsdsds", "John"
2, "dfdhifdkinf
dfjdfgkdnjgknkdjgndkng
dkfdkjfnjdnf", "Roy"
3, "dfjfdkgjfgn", "Rahul"
Run Code Online (Sandbox Code Playgroud)

我希望我的输出是

1, "asdsdsdsds", "John"
2, "dfdhifdkinf dfjdfgkdnjgknkdjgndkng dkfdkjfnjdnf", "Roy"
3, "dfjfdkgjfgn", "Rahul"
Run Code Online (Sandbox Code Playgroud)

我想使用PowerShell实现此输出

谢谢。

小智 5

根据 Ansgar 的回答,以下是在以下情况下如何执行此操作:

  • 您不知道列名
  • 您的 CSV 文件可能单独包含 CR 或 LF

    (Import-Csv $csvInput) | % {
        $line = $_
        foreach ($prop in $line.PSObject.Properties) {
            $line.($prop.Name) = ($prop.Value -replace '[\r\n]',' ')
        }
        $line
    } | Export-Csv $csvOutput -NoTypeInformation
    
    Run Code Online (Sandbox Code Playgroud)


Ans*_*ers 4

尝试这个:

$csv = 'C:\path\to\your.csv'

(Import-Csv $csv -Header 'ID','Value','Name') | % {
  $_.Value = $_.Value -replace "`r`n",' '
  $_
} | Export-Csv $csv -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)

如果您的 CSV 包含标题,请-Header 'ID','Value','Name'从导入中删除并替换Value为实际的列名称。

如果您不想在字段周围使用双引号,可以通过替换Export-Csv为如下内容来删除它们:

... | ConvertTo-Csv -NoTypeInformation | % { $_ -replace '"' } | Out-File $csv
Run Code Online (Sandbox Code Playgroud)

要从输出中删除标头,请在Out-File跳过第一行之前添加另一个过滤器:

... | select -Skip 1 | Out-File $csv
Run Code Online (Sandbox Code Playgroud)