使用PowerShell从.csv文件中用','替换制表符

时间:2017-02-21 06:10:53

标签: regex powershell csv

我是PowerShell的新手。我有一个.csv文件,其中数据由制表符分隔。我想使用PowerShell将所有标签替换为','。

还有一件事,一些列没有数据

我尝试了这个,但收到了错误。

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

错误:找不到接受的位置参数   参数'$ null'

提前致谢。

2 个答案:

答案 0 :(得分: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格式正确。

答案 1 :(得分:0)

就像vonPryz已经回答的那样。你可能想做这样的事情:

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