1

我正在尝试查找 csv 文件中高于某个值的行数。我的代码类似于

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

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

4

3 回答 3

4

Import-Csv 是用于此目的的官方 cmdlet。不过有一条评论,导入的所有内容都是一个字符串,因此您最好将 Value 属性转换为正确的类型。例如:

$T6 = Import-Csv $file | Where-Object { [float]$_.Value -ge 0.6 } | Measure-Object
于 2012-05-24T06:52:12.723 回答
2

为了提高处理大文件时的速度,请考虑使用流式阅读器,Roman's answer here演示了用法。

于 2012-05-24T06:56:29.320 回答
1

You can try to get rid of 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
于 2012-05-24T07:10:08.080 回答