特定の値を超える csv ファイル内の行数を見つけようとしています。私が持っているコードは次のようになります
$T6=Import-Csv $file | Where-Object {$_."Value" -ge 0.6 } | Measure-Object
これは小さいファイルには適していますが、大きな csv ファイル (1 GB 以上) の場合は永久に実行されます。PowerShell でこのような csv ファイルを解析するより良い方法はありますか?
特定の値を超える csv ファイル内の行数を見つけようとしています。私が持っているコードは次のようになります
$T6=Import-Csv $file | Where-Object {$_."Value" -ge 0.6 } | Measure-Object
これは小さいファイルには適していますが、大きな csv ファイル (1 GB 以上) の場合は永久に実行されます。PowerShell でこのような csv ファイルを解析するより良い方法はありますか?
Import-Csvは、このための公式コマンドレットです。ただし、1つのコメントとして、インポートされるものはすべて文字列であるため、Valueプロパティを正しいタイプにキャストすることをお勧めします。例えば:
$T6 = Import-Csv $file | Where-Object { [float]$_.Value -ge 0.6 } | Measure-Object
大きなファイルを処理する際の速度については、ストリームリーダーの使用を検討してください。ここでのローマンの回答は使用法を示しています。
あなたは取り除くことを試みることができます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