2017-02-21 103 views
0

我是PowerShell的新手。我有一個.csv文件,其中數據由製表符分隔。我想用PowerShell替換所有的標籤。使用PowerShell替換.csv文件中的選項卡

還有一點,有些列沒有數據

我試過這個,但得到錯誤。

get-content file_name.csv | ForEach-Object { $_ -replace '`t',',' } > changed_file.csv 

錯誤:位置參數無法找到接受 參數 '$空'

在此先感謝。

回答

2

使用Import-CSV cmdlet讀取CSV文件。從Powershell 2.0開始,可以使用參數-Delimiter指定字段分隔符是否不是逗號。

使用Export-CSV保存修改的CSV。通過使用內置的cmdlet,所有的CSV解析和繁重工作都已完成。

建議的替換單個字符的方式可能會產生意想不到的結果。考慮一個文件,像這樣並承擔字段由製表符分隔,

Id Name Data 
1  Tom  "Big boss" 
2  Dick "Senior Engineer" 
3  Harry "QA<TAB> Manager" 

由於<TAB>字符出現在數據列中,搜索的幼稚做法和替代會產生像這樣一個第四列,

Id, Name, Data,  Huh? 
3,  Harry, "QA",  "Manager" 

這會對進一步的CSV處理造成嚴重破壞。

內置的CSV cmdlet將文件解析爲實際的CSV數據,因此在錯誤的位置上沒有混合列 - 假設源CSV格式良好。

0

就像vonPryz已經回答。你會想這樣做:

Import-Csv old.csv -Delimiter "`t" | Export-Csv new.csv -Delimiter "," -NoTypeInformation 
+0

謝謝@Kirill的答覆。但我得到「錯誤:無法找到接受參數$ null'」的位置參數。我更多的事情**文件中的某些列沒有任何數據(null)。** – VivekT