Я хочу прочитати файл рядок за рядком у PowerShell. Зокрема, я хочу прокрутити файл, зберегти кожен рядок у змінній у циклі та виконати певну обробку в рядку.
Я знаю еквівалент Баша:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
Небагато документації щодо циклів PowerShell.
process
блок, і випльовує інший об'єкт на рядок у трубопровід, то проблема полягає в цій функції. Будь-які проблеми із завантаженням повного вмісту в пам'ять не є виною Get-Content
.
foreach($line in Get-Content .\file.txt)
Він завантажить весь файл у пам'ять, перш ніж він почне ітерацію. Якщо ви мені не вірите, прийміть файл журналу розміром 1 ГБ і спробуйте.
Get-Content .\file.txt | ForEach-Object -Process {}
знає конвеєр і не завантажує весь файл у пам’ять. За замовчуванням Get-Content проходить по одному рядку за конвеєром.
Get-Content
завантажує весь файл відразу в пам’ять, що не вдасться або зависне на великих файлах.