簡體   English   中英

在 Powershell 腳本中,如何轉換 pipe '|' 分隔文件為逗號 ',' 分隔 CSV?

[英]In Powershell Script, how do I convert a pipe '|' delimited file to a comma ',' delimited CSV?

在 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

通常,您應該使用正確處理嵌入在字段值中的分隔符的命令Import-CsvExport-Csv ,例如Field,1|Field2 基於Get-Content的解決方案會將其轉換為 3(!) 個字段Field,1,Field2 ,而 output 實際上應該像"Field,1",Field2"Field,1","Field2"一樣引用。

Import-Csv input.csv -Delimiter '|' | Export-Csv output.csv -Delimiter ','

這總是引用“output.csv”中的字段。 由於PowerShell (Core) 7+ ,新的Export-Csv 參數-UseQuotes-QuoteFields允許我們控制 output 文件的引用。

例如。 僅在必要時引用(當字段值包含分隔符或引號時):

Import-Csv input.csv -Delimiter '|' | Export-Csv output.csv -Delimiter ',' -UseQuotes AsNeeded

小心使用-UseQuotes Never ,因為如果字段值包含嵌入的分隔符或引號,它會導致 output 文件不可讀

抱歉,這可能需要您進行一些調整,但它可以完成工作。 請注意,這也會將文件類型從 .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 '|', ','

並相應地調整您的輸入和輸出文件名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM