在Powershell脚本中,如何转换'|' (管道)将CSV文件分隔为','(逗号)分隔的CSV文件?
当我们在Windows Powershell中使用以下命令'编码'UTF8'NoType'从'|'转换时(管道分隔符)到','(逗号分隔符),文件转换为','分隔但字符串添加“”(双重代码)。如下所示:
源文件数据:ABC | 1234 | CDE | 567 | 转换后的文件数据:“ABC”,“1234”,“CDE”,“567”,
但如何获得以下数据ABC,1234,CDE,567,
请帮助并提供从“|”转换分隔符的命令分隔','仅'。
由于 Buvan
答案 0 :(得分:2)
我会用:
(Get-Content -Path $file).Replace('|',',') | Set-Content -Path $file
答案 1 :(得分:1)
似乎很容易:
(get-content $file) -replace '|',',' | set-content $file
答案 2 :(得分:1)
你必须逃离管道,所以:
(get-content "d:\makej\test.txt" ) -replace "\|","," | set-content "d:\makej\test.csv"
答案 3 :(得分:0)
很抱歉,您可能需要进行一些调整,但它可以完成任务。请注意,这也会将文件类型从.txt更改为.csv,我认为您不想这样做。
$path = "<Path>"
$outPath = $path -replace ".txt",".csv"
Get-Content -path $path |
ForEach-Object {$_ -replace "|","," } |
Out-File -filepath $outPath
答案 4 :(得分:0)
我认为建议的答案有点风险,因为你将现有文件的全部内容都记录到内存中,因此不会很好地扩展,并且冒着使用大量内存的风险。我的建议是使用字符串替换作为之前建议的帖子,但是使用流来代替读写。这样你只需要文件中每一行的内存而不是整个内容。
点击此处查看我的其他答案: https://stackoverflow.com/a/32337282/380016
在我的示例代码中,您只需将字符串替换为:
USER TABLE
ID | name | mode
1 | foo | private
PRIVATE TABLE
private_id | id | private_name
1 | 1 | private mode
PUBLIC TABLE
public_id | id | public_name
1 | 1 | public mode
并相应地调整输入和输出文件名。