the - powershell ise vs powershell
Leer archivo línea por línea en PowerShell (3)
No hay mucha documentación sobre los bucles de PowerShell.
La documentación sobre los bucles en PowerShell es abundante, y es posible que desee consultar los siguientes temas de ayuda:
about_For
,
about_ForEach
,
about_Do
,
about_While
.
foreach($line in Get-Content ./file.txt) {
if($line -match $regex){
# Work here
}
}
Otra solución idiomática de PowerShell para su problema es canalizar las líneas del archivo de texto al
cmdlet
ForEach-Object
:
Get-Content ./file.txt | ForEach-Object {
if($_ -match $regex){
# Work here
}
}
En lugar de la coincidencia de expresiones regulares dentro del bucle, puede canalizar las líneas a través de
Where-Object
para filtrar solo aquellas que le interesan:
Get-Content ./file.txt | Where-Object {$_ -match $regex} | ForEach-Object {
# Work here
}
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 ciclo y hacer algo de 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.
El interruptor todopoderoso funciona bien aquí:
''one two three'' > file $regex = ''^t'' switch -regex -file file { $regex { "line is $_" } }
Salida:
line is two line is three
Get-Content
tiene un mal rendimiento;
intenta leer el archivo en la memoria de una vez.
El lector de archivos C # (.NET) lee cada línea una por una
Mejor rendimiento
foreach($line in [System.IO.File]::ReadLines("C:/path/to/file.txt"))
{
$line
}
O un poco menos eficiente
[System.IO.File]::ReadLines("C:/path/to/file.txt") | ForEach-Object {
$_
}
La declaración
foreach
probablemente será un poco más rápida que
ForEach-Object
(consulte los comentarios a continuación para obtener más información).