我是PowerShell的新手。我有一个.csv文件,其中数据由制表符分隔。我想使用PowerShell将所有标签替换为','。
还有一件事,一些列没有数据。
我尝试了这个,但收到了错误。
get-content file_name.csv | ForEach-Object { $_ -replace '`t',',' } > changed_file.csv
错误:找不到接受的位置参数 参数'$ null'
提前致谢。
答案 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