在Powershell脚本中,如何将|
(竖线)分隔的CSV文件转换为,
(逗号)分隔的CSV文件?
[当我们在Windows Powershell Encoding 'UTF8' -NoType
中使用以下命令将|
(管道定界符)转换为,
(逗号定界符)时,文件将以,
分隔,但字符串被" "
包围] (双引号)。如下所示:
源文件数据:
ABC | 1234 | CDE | 567 |
转换后的文件数据:
“ ABC”,“ 1234”,“ CDE”,“ 567”,
我想生成以下内容:
ABC,1234,CDE,567,
我可以使用什么命令将定界符从|
转换为,
?
我会使用:
(Get-Content -Path $file).Replace('|',',') | Set-Content -Path $file
您必须从管道中逸出,所以:
(get-content "d:\makej\test.txt" ) -replace "\|","," | set-content "d:\makej\test.csv"
似乎很容易:
(get-content $file) -replace '|',',' | set-content $file
很抱歉,您可能需要进行一些调整,但确实可以。请注意,这还将文件类型从.txt更改为.csv,我认为您不需要。
$path = "<Path>"
$outPath = $path -replace ".txt",".csv"
Get-Content -path $path |
ForEach-Object {$_ -replace "|","," } |
Out-File -filepath $outPath
我认为建议的答案有点冒险,因为您会将现有文件的全部内容存储到内存中,因此无法很好地扩展,并且存在使用大量内存的风险。我的建议是使用字符串替换如先前的文章所建议的那样,但是使用流代替读取和写入。这样,您只需要为文件中的每一行而不是整个文件存储空间。
在这里查看我的其他答案之一:https://stackoverflow.com/a/32337282/380016
在我的示例代码中,您只是将字符串替换更改为:
$s = $line -replace '|', ','
并且还要相应地调整输入和输出文件名。