Quero ler um arquivo linha por linha no PowerShell. Especificamente, quero fazer um loop no arquivo, armazenar cada linha em uma variável no loop e fazer algum processamento na linha.
Eu conheço o equivalente do Bash:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
Não há muita documentação sobre loops do PowerShell.
process
bloco e cospe outro objeto por linha no pipeline, então essa função é o problema. Quaisquer problemas com o carregamento de todo o conteúdo na memória não são culpa do Get-Content
.
foreach($line in Get-Content .\file.txt)
Ele carregará o arquivo inteiro na memória antes de começar a iteração. Se você não acredita em mim, pegue um arquivo de log de 1 GB e experimente.
Get-Content .\file.txt | ForEach-Object -Process {}
reconhece o pipeline e não carrega o arquivo inteiro na memória. Por padrão, Get-Content passará uma linha por vez no pipeline.
Get-Content
carrega o arquivo inteiro na memória de uma vez, o que irá falhar ou congelar em arquivos grandes.