cómo unir 2 líneas usando un archivo por lotes

Tengo un archivo de texto que tiene un número desconocido de líneas, algunas líneas comienzan con patrones, quiero unir las líneas que comienzan con patrones con la siguiente línea, por ejemplo

name=jimmy
age=19 id=23423 site=www.xxx.com
bla bla
name=katy
age=15 id=234543 site=www.yyy.com
name=ross
age=29 id=54564 site=www.ZZZZ.com

la salida debe ser

name=jimmy age=19 id=23423 site=www.xxx.com
 bla bla bla
name=katy age=15 id=234543 site=www.yyy.com
name=ross age=29 id=54564 site=www.ZZZZ.com

entonces el patrón es 'nombre' y debería unirse a la siguiente línea. Pensé en usar sed pero no sé cómo ayudar, por favor.

preguntado el 01 de julio de 12 a las 19:07

para ser honesto, no intenté nada, tengo un problema al procesar el archivo de texto, así que pensé que unir las dos líneas resolvería el problema, estoy haciendo un bucle, estoy analizando el texto del archivo línea por línea, así que lea una línea luego envíelo para hacer otras cosas, el problema es que quiero fusionar las dos líneas para poder hacerlas en un ciclo, tal vez mi explicación no fue clara :) así que pregúnteme si tiene dudas, por cierto, sed debería hacer eso pero me cuesta usarlo -

2 Respuestas

Bueno, aquí hay un guión sencillo:

@echo off
setlocal enabledelayedexpansion
set "INPUT_FILE=input.txt"
set "OUTPUT_FILE=output.txt"
set prev=
for /f "tokens=*" %%f in (%INPUT_FILE%) do (
    for /f "tokens=1,2 delims==" %%g in ("%%f") do (
        if "!prev!" neq "" (
            echo !prev! %%f >>%OUTPUT_FILE%
            set prev=
        ) else (
            if "%%g" equ "name" (
                set prev=%%f
            ) else (
                echo %%f >>%OUTPUT_FILE%
                set prev=
            )
        )
    )
)

Respondido 02 Jul 12, 11:07

@echo off
setlocal EnableDelayedExpansion
set pattern=name
set patternLen=4
call :ProcessFile < input.txt > output.txt
goto :EOF

:ProcessFile
set line=
set /P line=
if not defined line exit /B
if "!line:~0,%patternLen%!" equ "%pattern%" (
   set /P nextLine=
   set "line=!line! !nextLine!"
)
echo !line!
goto ProcessFile

El archivo por lotes anterior tiene el problema de que termina en la primera línea vacía del archivo de entrada. Sin embargo, este problema puede solucionarse si es necesario.

Respondido 03 Jul 12, 02:07

gracias, pero no funcionó conmigo, me dio la misma entrada: Leo92

Ops! Sí, tuve un pequeño error (la longitud del patrón es 4, no 3). Tenga en cuenta que para cambiar el patrón por cualquier otra uno, solo tienes que cambiar pattern y patternLen instrumentos de cuerda. Este programa no requiere que el patrón esté delimitado con el signo igual, es decir, usted indicó "el patrón es 'nombre'", no "el patrón está delimitado por '='". - Aacini

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.