Читання файлу по рядках в PowerShell
Я хочу прочитати файл рядок за рядком в PowerShell. Зокрема, я хочу циклічно переглядати файл, зберігати кожен рядок у змінній в циклі і виконувати деяку обробку в рядку.
Я знаю еквівалент Bash:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
Не так багато документації по циклам PowerShell.
80
3
Не так багато документації по циклам PowerShell.
Документації по циклам в PowerShell досить багато, і ви можете ознайомитися з наступними темами довідки: [
про_For
(https://docs.microsoft.com/en-gb/powershell/module/microsoft.powershell.core/about/about_for), [про_ForEach
(https://docs.microsoft.com/en-gb/powershell/module/microsoft.powershell.core/about/about_foreach), [про_Do
(https://docs.microsoft.com/en-gb/powershell/module/microsoft.powershell.core/about/about_do), [про_While
(https://docs.microsoft.com/en-gb/powershell/module/microsoft.powershell.core/about/about_while).Іншим ідіоматичним рішенням PowerShell для вашої проблеми є передача рядків текстового файлу в команду
ForEach-Object
:Замість регекс-співставлення всередині циклу, ви можете пропустити рядки через
Where-Object
, щоб відфільтрувати лише ті, що вас цікавлять:Get-Content
має погану продуктивність, він намагається прочитати файл в пам'ять одразу.Читач файлів на C# (.NET) читає кожен рядок по черзі
**Найкраща продуктивність
Або трохи менш продуктивний
Оператор
foreach
, ймовірно, буде трохи швидшим, ніжForEach-Object
(див. коментарі нижче для отримання додаткової інформації).Всемогутній вимикач тут спрацьовує якнайкраще:
Виведення: