使用powershell转换CSV文件

时间:2015-04-14 22:57:31

标签: powershell

我的CSV文件有很多列。我需要转换几个列,例如,某些日期列的文本字符串为“Missing”,我想将“Missing”替换为空字符串等。

以下代码可能有效,但由于有很多列,因此它将是一个长文件。这是一种更好的写作方式吗?

Import-Csv $file | 
  select @( 
      @{l="xxx"; e={ ....}}, 
      # repeat many times for each column....
  ) | export-Csv

2 个答案:

答案 0 :(得分:3)

您可以使用命令式样式而不是流水线样式:

$records = Import-Csv $file

foreach ($record in $records) 
{
    if ($record.Date -eq 'Missing')
    {
        $record.Date = ''
    }
}

$records | Export-Csv $file

编辑:要使用流水线样式,您可以这样做:

import-csv $file | 
   select -ExcludeProperty Name1,Name2 -Property *,@{n='Name1'; e={"..."}},@{n='Name2'; e={'...'}}

*是一个匹配所有属性的通配符。我找不到以更好的方式格式化这段代码的方法,所以它看起来很难看。

答案 1 :(得分:0)

如果你想做的只是一个发现 - 替换,你真的不需要把它作为一个CSV来阅读。

你可以这样做:

Get-Content $file | %{$_.ToString().Replace("Missing", "")} | Out-File $file