我有一个CSV文件,格式如下:
ID,Name,Notes,Status
1,aaa,blah,
blah2,status1
2,bbb,foo,status1
3,ccc,pow,
pow2,status1
如您所见,Notes列中的某些单元格包含逗号和换行符。我需要用空格替换这些字符,并将新行中的数据聚合到上一行的Notes单元格中,同时仍将状态置于Status列中,这样它将如下所示:
ID,Name,Notes,Status
1,aaa,blah blah2,status1
2,bbb,foo,status1
3,ccc,pow pow2,status1
我提出了以下代码段:
(Import-Csv $reportfile) | % {
$_.Notes = $_.Notes -replace "`r`n",' '
$_.Notes = $_.Notes -replace "`n",' '
$_.Notes = $_.Notes -replace ',',' '
$_
} | Export-Csv $newfile -NoTypeInformation
问题是,当导入文件时,Powershell会将一行上的数据解释为一行。因此,当我导出它时,它仍然保存在自己的行上。任何想法如何以不同方式导入文件并仍然完成从该列中替换那些不需要的字符?
答案 0 :(得分:1)
您可以尝试以下方法:
(Get-Content -ReadCount 0 $reportfile) -replace ',\r\n(?=\D)', ' ' -split "`r`n" | ConvertFrom-Csv
(未测试的)
这将首先将文件作为单个字符串读取,然后在行的末尾替换逗号,后跟空格换行,然后在换行符处拆分字符串并将其传递给ConvertFrom-Csv
。