[英]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-Csv
和Export-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.