使用PowerShell替换CSV中的空值?

时间:2014-02-03 09:13:48

标签: powershell csv powershell-v2.0 powershell-v3.0

我面临挑战,我不熟悉开发(但很长一段时间是系统管理员)。

基本上我有一个CSV(很多CSV,但我想从1开始),它包含一些空字段。

我希望我可以使用powershell加载csv,然后执行查找和替换,然后使用以下代码输出文件....但我不能指定零长度字符串。 (出于显而易见的原因,你不能搜索我想的任何东西)......

PS C:\Users\Administrator> [io.file]::readalltext("C:\BainesWingData.CSV").replace("","TEST") | Out-File c:\result.
csv -Encoding ascii -Force

我想做的就是用“0”替换空字段。以下是CSV的示例。空白字段的位置可能会有所不同。

Timestamp,Baines Wing - 0006.B0006 0006 EM03 (kWh),Baines Wing - 0006.B0006 0006 EM04 (kWh),Baines Wing - 0006.B0006 0006 EM05 (kWh),Baines Wing - 0006.B0016 0006 EM01 (kWh)
31/01/2014 20:00,,,,
31/01/2014 20:30,6,8,6,19
31/01/2014 21:00,5,9,6,19
31/01/2014 21:30,5,8,6,20
31/01/2014 22:00,5,8,6,19
31/01/2014 22:30,6,8,5,20
31/01/2014 23:00,5,7,6,19
31/01/2014 23:30,5,8,6,20
01/02/2014 00:00,5,8,5,19
01/02/2014 00:30,5,8,6,20
01/02/2014 01:00,5,8,6,19
01/02/2014 19:00,5,7,7,19
01/02/2014 19:30,,,,20
01/02/2014 20:00,,,,

如您所见,某些行有一些空字段。这打破了必须读取这些CSV文件的应用程序,因此我的目标是使用在这些CSV上运行的脚本来替换仅为0的空字段。

有人能指出我正确的方向吗?

此致 汤姆

2 个答案:

答案 0 :(得分:2)

尝试用0代替替换。

答案 1 :(得分:0)

不是很优雅,但这应该有效:

$csv=Import-Csv .\csv.csv -Header "time","EM03","EM02","EM05", "EM01"  
$csv | %{
    if($_.EM03 -eq "") {$_.EM03="0"}
    if($_.EM02 -eq "") {$_.EM02="0"}
    if($_.EM05 -eq "") {$_.EM05="0"}
    if($_.EM01 -eq "") {$_.EM01="0"}
} 
$csv|export-csv .\new.csv -NoTypeInformation