Leer archivos línea por línea en Windows PowerShell

  1. Mejora de la sintaxis del cmdlet Get-Content
  2. Cargando Líneas Específicas Usando switch
  3. Uso de la clase [System.IO.File] en PowerShell para leer el archivo línea por línea
Leer archivos línea por línea en Windows PowerShell

En Windows PowerShell, podemos usar el cmdlet Get-Content para leer archivos de un archivo. Sin embargo, el cmdlet cargará todo el contenido del archivo en la memoria a la vez, lo que fallará o se congelará en archivos grandes.

Para resolver este problema, lo que podemos hacer es leer los archivos línea por línea, y este artículo le mostrará cómo hacerlo.

Antes de comenzar, es mejor si creamos un archivo de texto de muestra con varias líneas. Por ejemplo, he creado un file.txt que contiene las siguientes líneas.

file.txt:

one
two
three
four
five
six
seven
eight
nine
ten

Según Microsoft, una expresión regular es un patrón que se utiliza para hacer coincidir el texto. Puede estar formado por caracteres literales, operadores y otras construcciones. Este artículo probará diferentes scripts que involucran una variable estándar llamada Expresiones regulares, denotada por $regex.

Mejora de la sintaxis del cmdlet Get-Content

Inicialmente hemos discutido que el cmdlet Get-Content tiene sus fallas cuando estamos cargando un archivo grande, ya que cargará todo el contenido del archivo en la memoria a la vez. Sin embargo, podemos mejorarlo cargando las líneas una a una usando el bucle foreach.

Código de ejemplo:

foreach($line in Get-Content .\file.txt) {
    if($line -match $regex){
        Write-Output $line
    }
}

Cargando Líneas Específicas Usando switch

Podemos usar la variable $regex para ingresar líneas específicas en nuestro archivo creando un valor $regex personalizado y combinándolo en una función de cambio de caso.

Código de ejemplo:

$regex = '^t'

switch -regex -file file.txt {
  $regex { "line is $_" } 
}

Producción :

line is two
line is three
line is ten

En este ejemplo, hemos definido un valor personalizado de $regex que solo coincidirá y mostrará líneas si comienza con el carácter t.

Uso de la clase [System.IO.File] en PowerShell para leer el archivo línea por línea

Si tiene acceso a la biblioteca .NET, puede usar la clase [System.IO.File] para leer el contenido de su archivo. Es una excelente alternativa a Get-Content ya que no necesitará expresiones regulares para manejar archivos línea por línea.

Código de ejemplo:

foreach($line in [System.IO.File]::ReadLines("C:\yourpathhere\file.txt"))
{
    Write-Output $line
}
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Artículo relacionado - PowerShell File