2017-02-21 106 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