Читать файл построчно в PowerShell
Я хочу прочитать файл строка за строкой в PowerShell. В частности, я хочу перебрать файл, сохранить каждую строку в переменной в цикле и выполнить некоторую обработку в строке.
Я знаю эквивалент Bash:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
не так много документации по циклам PowerShell.
3 ответов
не так много документации по циклам PowerShell.
документация по циклам в PowerShell многочисленна, и вы можете проверить следующие разделы справки:about_For
, about_ForEach
, about_Do
, about_While
.
foreach($line in Get-Content .\file.txt) {
if($line -match $regex){
# Work here
}
}
еще одно идиоматическое решение PowerShell для вашей проблемы-передать строки текстового файла в ForEach-Object
командлет:
Get-Content .\file.txt | ForEach-Object {
if($_ -match $regex){
# Work here
}
}
вместо соответствия регулярному выражению внутри цикла вы можете пропустить линии через Where-Object
для фильтрации только тех, кто вас интересует:
Get-Content .\file.txt | Where-Object {$_ -match $regex} | ForEach-Object {
# Work here
}
Get-Content
имеет плохую производительность; он пытается прочитать файл в память все сразу.
C# (.NET) file reader читает каждую строку по одному
Лучший Performace
foreach($line in [System.IO.File]::ReadLines("C:\path\to\file.txt"))
{
$line
}
или
[System.IO.File]::ReadLines("C:\path\to\file.txt") | ForEach-Object {
$line
}
на foreach
заявление, вероятно, будет немного быстрее, чем ForEach-Object
, но это потому, что загрузка всего этого в память обычно происходит быстрее.
по умолчанию Get-Content считывает всю строку в текстовом файле и создает массив в качестве его вывода с каждой строкой текста в качестве элемента в этом массиве.В этом случае номер индекса массива равен номеру строки текстового файла. Поэтому мы можем получить каждую строку текстового файла, используя номер индекса массива.
вы можете зациклить массив для чтения каждой строки.
$TxtContent = Get-content-Path "C:\path\TestFile - ... формат txt"
$TxtContent1
$TxtContent[2]
[см. это для полного примера] : http://dotnet-helpers.com/powershell-demo/reading-from-text-files-with-powershell/