【问题标题】:In Powershell Script, how do I convert a pipe '|' delimited file to a comma ',' delimited CSV?在 Powershell 脚本中,如何转换管道“|”分隔文件到逗号 ',' 分隔的 CSV?
【发布时间】:2014-01-08 13:06:32
【问题描述】:

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

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

源文件数据:

ABC|1234|CDE|567|

转换后的文件数据:

"ABC","1234","CDE","567",

我想生成以下内容:

ABC,1234,CDE,567,

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

【问题讨论】:

  • 引用的值仍然是有效的 CSV,并且可能更安全,您确定不能使用它们吗?
  • 如果源 ex. 中有逗号,您希望发生什么。 : ABC|1,23|DE,F|456 ?

标签: powershell delimiter


【解决方案1】:

我会使用:

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

【讨论】:

  • 没有产生输出文件。
  • @alroc 您仍然需要将其通过管道传输到输出。我已经更正了示例代码。
【解决方案2】:

你必须逃离管道,所以:

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

【讨论】:

  • 如果逗号存在于源文件中,这不会转义逗号。
【解决方案3】:

看起来很简单:

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

【讨论】:

    【解决方案4】:

    抱歉,这可能需要您进行一些调整,但它确实可以完成工作。请注意,这也会将文件类型从 .txt 更改为 .csv,我认为这不是您想要的。

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

    【讨论】:

      【解决方案5】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2015-04-21
        • 2020-07-21
        • 1970-01-01
        • 1970-01-01
        • 2020-02-02
        • 1970-01-01
        • 2016-09-05
        • 2014-12-09
        • 1970-01-01
        相关资源
        最近更新 更多