第5列が満たされ、条件を満たさないレコードの数をカウントするために、大きなパイプ区切りファイルを解析する必要があります。PowerShell区切りテキスト解析スクリプトのパフォーマンスを改善するのに役立つ
PS C:\temp> gc .\items.txt -readcount 1000 | `
? { $_ -notlike "HEAD" } | `
% { foreach ($s in $_) { $s.split("|")[4] } } | `
group -property {$_ -ge 256} -noelement | `
ft –autosize
このコマンドは、私はこのような出力を返して、欲しいものを行います。
はCount Name ----- ---- 1129339 True 2013703 False
しかし、500メガバイトのテストファイルのために、このコマンドは、Measure-Commandコマンドによって測定されるように実行するのに約5.5分かかります。典型的なファイルは2GB以上であり、20分以上待つことは望ましくないほど長い。
このコマンドのパフォーマンスを向上させる方法がありますか?
たとえば、Get-ContentのReadCountに最適な値を決定する方法はありますか?それがなければ、同じファイルを完了するのに8.8分かかります。
StreamReaderを試しましたか?私はGet-Contentがそれを使って何かをする前にファイル全体をメモリにロードすると思います。 – Gisli
あなたはSystem.IOをインポートすることを意味しますか? – neontapir
可能であれば、.netフレームワークを使用してください。私は、SQL Serverが優れた結果を出して生成する大規模なログファイルを読み込むことに慣れていました。私は大きなファイルを効率的に読むためにPowerShellで他の方法を知らないが、私は専門家ではない。 – Gisli