在Powershell脚本中,如何转换'|' (管道)将CSV文件分隔为','(逗号)分隔的CSV文件?

时间:2014-01-08 13:06:33

标签: powershell

在Powershell脚本中,如何转换'|' (管道)将CSV文件分隔为','(逗号)分隔的CSV文件?

当我们在Windows Powershell中使用以下命令'编码'UTF8'NoType'从'|'转换时(管道分隔符)到','(逗号分隔符),文件转换为','分隔但字符串添加“”(双重代码)。如下所示:

源文件数据:ABC | 1234 | CDE | 567 | 转换后的文件数据:“ABC”,“1234”,“CDE”,“567”,

但如何获得以下数据ABC,1234,CDE,567,

请帮助并提供从“|”转换分隔符的命令分隔','仅'。

由于 Buvan

5 个答案:

答案 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

并相应地调整输入和输出文件名。