我有一个带有字符串列的CSV文件,该列跨越多行。我想将这些多行聚合成一行。
例如
1, "asdsdsdsds", "John"
2, "dfdhifdkinf
dfjdfgkdnjgknkdjgndkng
dkfdkjfnjdnf", "Roy"
3, "dfjfdkgjfgn", "Rahul"
我希望我的输出
1, "asdsdsdsds", "John"
2, "dfdhifdkinf dfjdfgkdnjgknkdjgndkng dkfdkjfnjdnf", "Roy"
3, "dfjfdkgjfgn", "Rahul"
我想使用PowerShell
实现此输出感谢。
答案 0 :(得分:3)
试试这个:
$csv = 'C:\path\to\your.csv'
(Import-Csv $csv -Header 'ID','Value','Name') | % {
$_.Value = $_.Value -replace "`r`n",' '
$_
} | Export-Csv $csv -NoTypeInformation
如果您的CSV包含标题,请从导入中删除-Header 'ID','Value','Name'
,并将Value
替换为实际的列名称。
如果您不想在字段周围使用双引号,则可以通过将Export-Csv
替换为以下内容来删除它们:
... | ConvertTo-Csv -NoTypeInformation | % { $_ -replace '"' } | Out-File $csv
要从输出中删除标题,请在Out-File
之前添加另一个过滤器以跳过第一行:
... | select -Skip 1 | Out-File $csv
答案 1 :(得分:2)
在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
答案 2 :(得分:1)
您可以导入csv,执行专门的选择,并将结果写入新的CSV。
import-csv Before.csv -Header "ID","Change" | Select ID,@{Name="NoNewLines", Expression={$_.Change -replace "`n"," "}} | export-csv After.csv
关键部分在select语句中,它允许您传递专用的哈希表(Name是属性的名称,Expression是计算它的脚本块)。
您可能需要稍微调整标题以获得所需的确切输出。
答案 3 :(得分:0)
Export-CSV的问题有两个:
上述两种解决方案都是使用Convertto-CSV代替。这是一个示例:
{bunch of stuff} | ConvertTo-CSV | %{$_ -replace "`n","<NL>"} | %{$_ -replace "`r","<CR>"} >>$AppendFile
请注意,这允许您对数据进行任何编辑(在这种情况下,替换换行数据),并使用重定向来追加。