PowerShellでファイルを1行ずつ読みたいのですが。具体的には、ファイルをループして、各行をループ内の変数に格納し、その行でいくつかの処理を行います。
私はBashの同等物を知っています:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
PowerShellループに関するドキュメントは多くありません。
@KolobCanyonそれは完全に偽りです。既定では、Get-Contentは各行をパイプラインの1つのオブジェクトとして読み込みます。
—
フィッシュ
process
ブロックを指定しない関数にパイプし、パイプラインに1行ごとに別のオブジェクトを吐き出す場合は、その関数が問題です。完全なコンテンツをメモリにロードする際の問題は、のせいではありませんGet-Content
。
@TheFish
—
Kolob Canyon
foreach($line in Get-Content .\file.txt)
反復を開始する前に、ファイル全体をメモリにロードします。信じられない場合は、1GBのログファイルを入手して試してください。
@KolobCanyonそれはあなたが言ったことではありません。Get-Contentはすべてをメモリにロードすると言っていましたが、これは正しくありません。あなたが変更したforeachの例は、そうです。foreachはパイプラインを認識しません。
—
魚
Get-Content .\file.txt | ForEach-Object -Process {}
パイプラインを認識し、ファイル全体をメモリにロードしません。既定では、Get-Contentは一度に1行をパイプライン経由で渡します。
Get-Content
ファイル全体を一度にメモリにロードします。これは、大きなファイルで失敗またはフリーズします。