在Powershell脚本中,如何转换管道'|'分隔文件,以逗号“,”分隔CSV?

问题描述 投票:2回答:5

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

[当我们在Windows Powershell Encoding 'UTF8' -NoType中使用以下命令将|(管道定界符)转换为,(逗号定界符)时,文件将以,分隔,但字符串被" "包围] (双引号)。如下所示:

源文件数据:

ABC | 1234 | CDE | 567 |

转换后的文件数据:

“ ABC”,“ 1234”,“ CDE”,“ 567”,

我想生成以下内容:

ABC,1234,CDE,567,

我可以使用什么命令将定界符从|转换为,

powershell delimiter
5个回答
3
投票

我会使用:

(Get-Content -Path $file).Replace('|',',') | Set-Content -Path $file

2
投票

您必须从管道中逸出,所以:

(get-content "d:\makej\test.txt" ) -replace "\|","," | set-content "d:\makej\test.csv"

1
投票

似乎很容易:

(get-content $file) -replace '|',',' | set-content $file

0
投票

很抱歉,您可能需要进行一些调整,但确实可以。请注意,这还将文件类型从.txt更改为.csv,我认为您不需要。

$path = "<Path>"
$outPath = $path -replace ".txt",".csv"
Get-Content -path $path | 
ForEach-Object {$_ -replace "|","," } |  
Out-File -filepath $outPath

0
投票

我认为建议的答案有点冒险,因为您会将现有文件的全部内容存储到内存中,因此无法很好地扩展,并且存在使用大量内存的风险。我的建议是使用字符串替换如先前的文章所建议的那样,但是使用流代替读取和写入。这样,您只需要为文件中的每一行而不是整个文件存储空间。

在这里查看我的其他答案之一:https://stackoverflow.com/a/32337282/380016

在我的示例代码中,您只是将字符串替换更改为:

$s = $line -replace '|', ','

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

© www.soinside.com 2019 - 2024. All rights reserved.