Quiero leer un archivo línea por línea en PowerShell. Específicamente, quiero recorrer el archivo, almacenar cada línea en una variable en el bucle y hacer algún procesamiento en la línea.
Sé el equivalente de Bash:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
No hay mucha documentación sobre los bucles de PowerShell.
process
bloque y escupe otro objeto por línea en la canalización, entonces esa función es el problema. Cualquier problema con la carga del contenido completo en la memoria no es culpa de Get-Content
.
foreach($line in Get-Content .\file.txt)
el archivo completo en la memoria antes de que comience a iterar. Si no me cree, obtenga un archivo de registro de 1 GB y pruébelo.
Get-Content .\file.txt | ForEach-Object -Process {}
es compatible con la canalización y no cargará todo el archivo en la memoria. De forma predeterminada, Get-Content pasará una línea a la vez a través de la canalización.
Get-Content
carga todo el archivo en la memoria a la vez, lo que fallará o se congelará en archivos grandes.