Je souhaite lire un fichier ligne par ligne dans PowerShell. Plus précisément, je souhaite parcourir le fichier, stocker chaque ligne dans une variable de la boucle et effectuer un traitement sur la ligne.
Je connais l'équivalent Bash:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
Pas beaucoup de documentation sur les boucles PowerShell.
process
bloc et crache un autre objet par ligne dans le pipeline, alors cette fonction est le problème. Les problèmes de chargement du contenu complet en mémoire ne sont pas la faute de Get-Content
.
foreach($line in Get-Content .\file.txt)
Il chargera le fichier entier en mémoire avant de commencer l'itération. Si vous ne me croyez pas, allez chercher un fichier journal de 1 Go et essayez-le.
Get-Content .\file.txt | ForEach-Object -Process {}
est compatible avec le pipeline et ne chargera pas le fichier entier en mémoire. Par défaut, Get-Content passera une ligne à la fois dans le pipeline.
Get-Content
charge le fichier entier en mémoire à la fois, ce qui échouera ou se bloquera sur les gros fichiers.