如何在PowerShell中处理大型CSV文件

时间:2012-05-23 22:15:15

标签: powershell csv

我试图找到csv文件中超过某个值的行数。我的代码就像

$T6=Import-Csv $file | Where-Object {$_."Value" -ge 0.6 } | Measure-Object

这适用于较小的文件,但对于大型csv文件(1 GB或更多),它将永远运行。有没有更好的方法在PowerShell中解析像这样的csv文件?

3 个答案:

答案 0 :(得分:2)

Import-Csv是这方面的官方cmdlet。但是,有一条注释,导入的所有内容都是字符串,因此您最好将Value属性强制转换为正确的类型。例如:

$T6 = Import-Csv $file | Where-Object { [float]$_.Value -ge 0.6 } | Measure-Object

答案 1 :(得分:2)

对于处理大文件时的速度,考虑使用streamreader,Roman的回答here演示了用法。

答案 2 :(得分:1)

您可以尝试摆脱Import-Csv

$values = ([System.IO.File]::ReadAllText('c:\pst\New Microsoft Office Excel Worksheet.csv')).Split(";") | where {$_ -ne ""}

$items = New-Object "System.Collections.Generic.List[decimal]" 

foreach($value in $values)
{
    [decimal]$out = New-Object decimal
    if ([System.Decimal]::TryParse($value, [ref] $out))
      {
         if ($out -ge 10){$items.Add($out)}
      } 
   }
$items | Measure-Object