1 votos

¿Cómo unir líneas de en un archivo txt con Powershell?

Estoy queriendo unir líneas de un archivo txt con las siguientes condiciones usando Powershell

  1. Si al final de la línea hay un punto debe empezar otra línea
  2. Eliminar líneas que están vacías

archivo.txt

Lorem Ipsum

es simplemente texto

ficticio.

Hay muchas

variaciones de pasajes

de Lorem Ipsum disponibles.

Lorem Ipsum

se popularizó en

la década de 1960.

Lorem Ipsum tiende

a repetir

fragmentos predefinidos.

resultado.txt

Lorem Ipsum es simplemente texto ficticio.

Hay muchas variaciones de pasajes de Lorem Ipsum disponibles

Lorem Ipsum se popularizó en la década de 1960.

Lorem Ipsum tiende a repetir fragmentos predefinidos.

1voto

Eduardo Eduardo Puntos 20

Aquí la solución que conseguí hacer:

$datos = Get-Content Archivo.txt
$buffer = ""

Foreach ($dato in $datos) {
    $dato = $dato.Trim()
    If ($dato -eq "") { Continue } Else {
    $a = $dato.Substring($dato.Length-1)
        If ($a -eq ".") {
            $buffer = $buffer + $dato
            $buffer | Out-File Resultado.txt -Append
            $buffer = ""
        } Else { $buffer = $buffer + $dato + " " }
    }
}
[Console]::WriteLine("")

Explicación:

Primero almaceno el contenido del Archivo.txt en la variable $datos

Luego creo la variable $buffer vacía, en donde almacenar cada línea.

Usando Foreach tomo de $datos línea a línea en la variable $dato

Uso Trim para eliminar espacios al inicio y al final de las líneas

Con If ($dato -eq "") { Continue } filtro líneas en blanco para quitarlas y no ponerlas en el resultado

Con "If ($a -eq ".") " encuentra aquella línea que finaliza en un punto y lo guarda en Resultado.txt

y finalmente en "Else { $buffer = $buffer + $dato + " " }" se van juntando las líneas que no tenían puntos.

0voto

aFrost Puntos 315

Podrías leer el texto a una variable, después hacer un bucle que procese el texto caracter por caracter y vaya escribiendo a otra variable o archivo, si hay un intro lo ignoras, y si hay punto metes un intro.

No se mucho de powershell pero para procesar una variable letra a letra puedes hacerlo asi:

$myString = get-content NombreArchivo | Out-String
for ($i = 0; $i -lt $myString.Length; $i++) {
    if ($myString[$i] -eq ("`r|`n"))  {
         // Ignorarla
    } else {
         // Añadir al archivo nuevo
    }
}

0 votos

Gracias por la respuesta, probé el código pero al procesar letra a letra el archivo resultante salió demasiado pesado.

0 votos

¿Demasiado pesado? ¿Metió caracteres raros o algo?

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: